Message ID | 20170812120510.28750-4-phil@nwl.cc |
---|---|
State | Changes Requested, archived |
Delegated to: | stephen hemminger |
Headers | show |
On Sat, 12 Aug 2017 14:04:22 +0200 Phil Sutter <phil@nwl.cc> wrote: > The buffer is accessed outside of the function defining it, so make it > static. > > Signed-off-by: Phil Sutter <phil@nwl.cc> Where does a function access this buffer which is not a sibling?
On Tue, Aug 15, 2017 at 08:13:08AM -0700, Stephen Hemminger wrote: > On Sat, 12 Aug 2017 14:04:22 +0200 > Phil Sutter <phil@nwl.cc> wrote: > > > The buffer is accessed outside of the function defining it, so make it > > static. > > > > Signed-off-by: Phil Sutter <phil@nwl.cc> > > Where does a function access this buffer which is not a sibling? flushb is (was) an auto-variable of ipaddr_flush() which makes filter.flushb point to it. That pointer is dereferenced from rtnl_send_check() called by flush_update() and from print_addrinfo(). I have to admit, the code around flushing addresses is a bit of a mystery to me, but I don't think it's safe to access function local storage from outside of it's scope. Cheers, Phil
diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 4d37c5e045071..3c9decb51b412 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -1488,7 +1488,7 @@ static void ipaddr_filter(struct nlmsg_chain *linfo, struct nlmsg_chain *ainfo) static int ipaddr_flush(void) { int round = 0; - char flushb[4096-512]; + static char flushb[4096-512]; filter.flushb = flushb; filter.flushp = 0;
The buffer is accessed outside of the function defining it, so make it static. Signed-off-by: Phil Sutter <phil@nwl.cc> --- ip/ipaddress.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)