diff options
author | Christian Lamparter <chunkeey@gmail.com> | 2023-05-21 18:30:14 +0200 |
---|---|---|
committer | Christian Lamparter <chunkeey@gmail.com> | 2023-05-22 14:45:03 +0200 |
commit | aed2569d3780cab1a1a2d75c9f9e3fe413a9844d (patch) | |
tree | 0c39ad4cc859f8899b70afd983e5dc87ef099eab /target/linux/uml | |
parent | 7d0fb2cc34cb7aaa2b6eaca4f14f2c20778d3e40 (diff) | |
download | openwrt-aed2569d3780cab1a1a2d75c9f9e3fe413a9844d.tar.gz openwrt-aed2569d3780cab1a1a2d75c9f9e3fe413a9844d.tar.bz2 openwrt-aed2569d3780cab1a1a2d75c9f9e3fe413a9844d.zip |
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@gmail.com>
Diffstat (limited to 'target/linux/uml')
-rw-r--r-- | target/linux/uml/patches-5.15/102-pseudo-random-mac.patch | 24 |
1 files 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: |