Re: route(8) core dump, possible gcc(1) related

From: Alexander Kabaev <kabaev_at_gmail.com>
Date: Sun, 16 Dec 2007 14:34:54 -0500
On Sun, 16 Dec 2007 21:27:17 +0300 (MSK)
Maxim Konovalov <maxim_at_macomnet.ru> wrote:

> Hello,
> 
> gcc w/ default flags:
> 
> # route add 172.19.16.0.0/16 10.10.10.2
> zsh: segmentation fault (core dumped)
> 
> gcc -O0:
> 
> # route add 172.19.16.0.0/16 10.10.10.2
> route: bad address: 172.19.16.0.0/16
> 
> I failed to find any bugs in this code snippet where route(8)
> dumps a core (line 1041):
> 
>  1033           q = strchr(s,'/');
>  1034           if (q && which == RTA_DST) {
>  1035                   *q = '\0';
>  1036                   if ((val = inet_network(s)) != INADDR_NONE) {
>  1037                           inet_makenetandmask(
>  1038                                   val, &su->sin, strtoul(q+1,
> 0, 0)); 1039                           return (0);
>  1040                   }
>  1041                   *q = '/';
>  1042           }
> 
> Any comments?
> 
Preliminary results show that inet_network from libc is somehow
thrashing $ebx even if it is not supposed to. -O0 disables value
caching in register and always allocates stack slot for the 'q'
pointer, so the problem is not visible.

Thanks for the test case, I'll look some more. 

-- 
Alexander Kabaev

Received on Sun Dec 16 2007 - 18:35:02 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:24 UTC