NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/43541: Unaligned access in pf_normalize_tcpopt()



The following reply was made to PR kern/43541; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: kern/43541: Unaligned access in pf_normalize_tcpopt()
Date: Tue, 29 Jun 2010 23:35:13 +0000

 On Tue, Jun 29, 2010 at 11:20:05PM +0000, David Laight wrote:
  >>> +                         optp[2] = (u_char)(r->max_mss >> 8) & 0xff;
  >>> +                         optp[3] = (u_char)(r->max_mss) & 0xff;
  >>  
  >>  Do those casts serve any purpose?
  >  
  >  Do the '& 0xff' serve any purpose ?
 
 Arguably not, but they at least can't mask other bugs.
 
  >  The compiler may well generate code that 'and's the value with 0xff twice
  >  before storing the low 8 bits away!
 
 Not very likely, except perhaps with gcc -O0, which is so stupid
 anyway that there's no point worrying about it.
 
  >  OTOH reversing the two lines may well save a temporary register.
  >  Hmmm... actually you want to cache r->max_rss in a local, the compiler
  >  is most likely required to re-read r->max_rss between the two statements.
 
 Why would it be? It's not IIRC marked volatile.
 
 -- 
 David A. Holland
 dholland%netbsd.org@localhost
 


Home | Main Index | Thread Index | Old Index