Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:GA
iproute2
fix-build-with-D_FORTIFY_SOURCE-2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fix-build-with-D_FORTIFY_SOURCE-2.patch of Package iproute2
From: Richard Biener <rguenther@suse.com> Date: Thu, 5 Dec 2013 15:01:06 +0100 Subject: fix build with -D_FORTIFY_SOURCE=2 Patch-mainline: Never References: bnc#719537 The ip command built with -D_FORTIFY_SOURCE=2 fails due to a buffer overflow being detected (bnc#719537). This is a false positive but we need to work around it to pass the TAHI test suite. --- ip/xfrm_state.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c index c4d2bf6..0b89c80 100644 --- a/ip/xfrm_state.c +++ b/ip/xfrm_state.c @@ -410,13 +410,16 @@ static int xfrm_state_modify(int cmd, unsigned flags, int argc, char **argv) struct xfrm_algo_auth auth; } u; char buf[XFRM_ALGO_KEY_BUF_SIZE]; - } alg = {}; + } *alg; int len; __u32 icvlen, trunclen; char *name; char *key = ""; char *buf; + alg = alloca(sizeof(*alg) + XFRM_ALGO_KEY_BUF_SIZE); + memset(alg, 0, sizeof(*alg) + XFRM_ALGO_KEY_BUF_SIZE); + switch (type) { case XFRMA_ALG_AEAD: if (ealgop || aalgop || aeadop) @@ -461,8 +464,8 @@ static int xfrm_state_modify(int cmd, unsigned flags, int argc, char **argv) break; } - buf = alg.u.alg.alg_key; - len = sizeof(alg.u.alg); + buf = alg->u.alg.alg_key; + len = sizeof(alg->u.alg); switch (type) { case XFRMA_ALG_AEAD: @@ -472,10 +475,10 @@ static int xfrm_state_modify(int cmd, unsigned flags, int argc, char **argv) if (get_u32(&icvlen, *argv, 0)) invarg("ALGO-ICV-LEN value is invalid", *argv); - alg.u.aead.alg_icv_len = icvlen; + alg->u.aead.alg_icv_len = icvlen; - buf = alg.u.aead.alg_key; - len = sizeof(alg.u.aead); + buf = alg->u.aead.alg_key; + len = sizeof(alg->u.aead); break; case XFRMA_ALG_AUTH_TRUNC: if (!NEXT_ARG_OK()) @@ -484,19 +487,19 @@ static int xfrm_state_modify(int cmd, unsigned flags, int argc, char **argv) if (get_u32(&trunclen, *argv, 0)) invarg("ALGO-TRUNC-LEN value is invalid", *argv); - alg.u.auth.alg_trunc_len = trunclen; + alg->u.auth.alg_trunc_len = trunclen; - buf = alg.u.auth.alg_key; - len = sizeof(alg.u.auth); + buf = alg->u.auth.alg_key; + len = sizeof(alg->u.auth); break; } - xfrm_algo_parse((void *)&alg, type, name, key, - buf, sizeof(alg.buf)); - len += alg.u.alg.alg_key_len; + xfrm_algo_parse((void *)alg, type, name, key, + buf, sizeof(alg->buf)); + len += alg->u.alg.alg_key_len; addattr_l(&req.n, sizeof(req.buf), type, - (void *)&alg, len); + (void *)alg, len); break; } default: -- 1.8.1.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor