x86: Work around compiler code generation bug with -Os

Some versions of gcc generate incorrect code for the inet_check_attr()
function, apparently due to a totally bogus index -> pointer comparison
transformation.

At least "gcc version 4.0.1 20050727 (Red Hat 4.0.1-5)" from FC4 is
affected, possibly others too.

This changes the function subtly so that the buggy gcc transformation
doesn't trigger.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>

+3 -3
+3 -3
net/ipv4/fib_frontend.c
··· 289 289 { 290 290 int i; 291 291 292 - for (i=1; i<=RTA_MAX; i++) { 293 - struct rtattr *attr = rta[i-1]; 292 + for (i=1; i<=RTA_MAX; i++, rta++) { 293 + struct rtattr *attr = *rta; 294 294 if (attr) { 295 295 if (RTA_PAYLOAD(attr) < 4) 296 296 return -EINVAL; 297 297 if (i != RTA_MULTIPATH && i != RTA_METRICS) 298 - rta[i-1] = (struct rtattr*)RTA_DATA(attr); 298 + *rta = (struct rtattr*)RTA_DATA(attr); 299 299 } 300 300 } 301 301 return 0;