Browse Source

uml: fix build error due to frame size > 1024

the UML build fails during the kernel build:
| arch/um/drivers/net_kern.c: In function 'compute_hash':
| arch/um/drivers/net_kern.c:322:1: error: the frame size of 1072 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
|  322 | }
|      | ^
|cc1: all warnings being treated as errors

The compute_hash() function is added by our patch:
102-pseudo-random-mac.patch

Instead of allocating a 1024 byte buffer on the stack for the SHA1
digest input, let's allocate the data on the heap. We should be
able to do that since crypto_alloc_ahash and ahash_request_alloc
also need to allocate structures on the heap.

Signed-off-by: Christian Lamparter <[email protected]>
Christian Lamparter 2 years ago
parent
commit
aed2569d37
1 changed files with 14 additions and 10 deletions
  1. 14 10
      target/linux/uml/patches-5.15/102-pseudo-random-mac.patch

+ 14 - 10
target/linux/uml/patches-5.15/102-pseudo-random-mac.patch

@@ -49,7 +49,7 @@ Applies to vanilla kernel 3.9.4.
  #define DRIVER_NAME "uml-netdev"
  
  static DEFINE_SPINLOCK(opened_lock);
-@@ -274,9 +282,51 @@ static const struct ethtool_ops uml_net_
+@@ -274,9 +282,55 @@ static const struct ethtool_ops uml_net_
  	.get_ts_info	= ethtool_op_get_ts_info,
  };
  
@@ -59,24 +59,26 @@ Applies to vanilla kernel 3.9.4.
 + *  * an interface name. */
 +static int compute_hash(const char *umid, const char *ifname, char *hash)
 +{
-+	struct ahash_request *desc;
-+	struct crypto_ahash *tfm;
++	struct ahash_request *desc = NULL;
++	struct crypto_ahash *tfm = NULL;
 +	struct scatterlist sg;
-+	char vmif[1024];
-+	int ret;
++	char *vmif = NULL;
++	int ret = -ENOMEM;
++
++	vmif = kmalloc(1024, GFP_KERNEL);
++	if (!vmif)
++		goto out;
 +
 +	strcpy (vmif, umid);
 +	strcat (vmif, ifname);
 +
 +	tfm = crypto_alloc_ahash("sha1", 0, CRYPTO_ALG_ASYNC);
 +	if (IS_ERR(tfm))
-+		return -ENOMEM;
++		goto out;
 +
 +	desc = ahash_request_alloc(tfm, GFP_KERNEL);
-+	if (!desc) {
-+		ret = -ENOMEM;
++	if (!desc)
 +		goto out;
-+	}
 +
 +	crypto_ahash_clear_flags(tfm, ~0);
 +
@@ -88,6 +90,8 @@ Applies to vanilla kernel 3.9.4.
 +	ret = crypto_ahash_digest(desc);
 +out:
 +	crypto_free_ahash(tfm);
++	ahash_request_free(desc);
++	kfree(vmif);
 +
 +	return ret;
 +}
@@ -101,7 +105,7 @@ Applies to vanilla kernel 3.9.4.
  	char *end;
  	int i;
  
-@@ -319,9 +369,26 @@ void uml_net_setup_etheraddr(struct net_
+@@ -319,9 +373,26 @@ void uml_net_setup_etheraddr(struct net_
  	return;
  
  random: