On Sat, Mar 01, 2014 at 08:31:42AM +0200, Alan Barrett wrote: > On Thu, 27 Feb 2014, David Laight wrote: > >Modified Files: > > src/sys/kern: kern_sysctl.c > > >+ case CTLTYPE_INT: > >+ /* Allow for 64bit read of 32bit value */ > >+ if (*oldlenp == sizeof (uint64_t)) { > >+ qval = *(int *)d; > >+ d_out = &qval; > >+ sz = sizeof (uint64_t); > >+ } > >+ break; > >+ case CTLTYPE_QUAD: > >+ /* Allow for 32bit read of 64bit value */ > >+ if (*oldlenp == sizeof (int)) { > >+ qval = *(uint64_t *)d; > >+ ival = qval < 0x100000000 ? qval : 0xffffffff; > >+ d_out = &ival; > >+ sz = sizeof (int); > >+ } > >+ break; > > This will fail if int is not a 32-bit type, because it uses hardcoded > masks instead of adapting to the actual size.
It goes wrong if 'int' is larger than 'uint64_t' as well! I'll fix it for 64bit int (modulo any signed v unsigned warnings). David -- David Laight: da...@l8s.co.uk