[openwrt/openwrt] uml: fix build error due to frame size > 1024

LEDE Commits lede-commits at lists.infradead.org
Mon May 22 06:28:06 PDT 2023


chunkeey pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/aed2569d3780cab1a1a2d75c9f9e3fe413a9844d

commit aed2569d3780cab1a1a2d75c9f9e3fe413a9844d
Author: Christian Lamparter <chunkeey at gmail.com>
AuthorDate: Sun May 21 18:30:14 2023 +0200

    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 <chunkeey at gmail.com>
---
 .../uml/patches-5.15/102-pseudo-random-mac.patch   | 24 +++++++++++++---------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/target/linux/uml/patches-5.15/102-pseudo-random-mac.patch b/target/linux/uml/patches-5.15/102-pseudo-random-mac.patch
index 925b9d7710..045d2d0dbd 100644
--- a/target/linux/uml/patches-5.15/102-pseudo-random-mac.patch
+++ b/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:




More information about the lede-commits mailing list