NetBSD-Bugs archive

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

Re: port-vax/41315: off by one error in vfs_dirhash.c



On May 1,  2:55am, lidl%pix.net@localhost (lidl%pix.net@localhost) wrote:
-- Subject: port-vax/41315: off by one error in vfs_dirhash.c

| >Number:         41315
| >Category:       port-vax
| >Synopsis:       off by one error in vfs_dirhash.c
| >Confidential:   no
| >Severity:       serious
| >Priority:       medium
| >Responsible:    port-vax-maintainer
| >State:          open
| >Class:          sw-bug
| >Submitter-Id:   net
| >Arrival-Date:   Fri May 01 02:55:00 +0000 2009
| >Originator:     Kurt Lidl
| >Release:        netbsd-5-RC4
| >Organization:
| >Environment:
| cross-compile of netbsd-5-RC4 from solaris for a vax
| I noticed the problem compiling for a vax, but it's
| a MI kernel file.
| >Description:
| I whacked up a gcc 4.4.1-prerelease to build the netbsd-vax
| tree.  (I've not updated to netbsd-5 release, but will soon.)
| 
| Anyway, it complains thusly:
| 
| #   compile  GENERIC/ncr53c9x.o
| /nbsd/vax-5/tools/bin/vax--netbsdelf-gcc -fno-pic -ffreestanding #   compile  
GENERIC/vfs_dirhash.o
| /nbsd/vax-5/tools/bin/vax--netbsdelf-gcc -fno-pic -ffreestanding 
-fno-zero-initialized-in-bss -g -pipe -O2 -std=gnu99 -fno-strict-aliasing 
-Werror -Wall -Wno-main -Wno-format-zero-length -Wpointer-arith 
-Wmissing-prototypes -Wstrict-prototypes -Wswitch -Wshadow -Wcast-qual 
-Wwrite-strings -Wno-unreachable-code -Wno-sign-compare -Wno-pointer-sign 
-Wno-attributes -Werror -D_VAX_INLINE_ -I. -I/nbsd/nbsd-5/sys/../common/include 
-I/nbsd/nbsd-5/sys/arch -I/nbsd/nbsd-5/sys -nostdinc -DLKM -DMAXUSERS=8 
-D_KERNEL -D_KERNEL_OPT 
-I/nbsd/nbsd-5/sys/lib/libkern/../../../common/lib/libc/quad 
-I/nbsd/nbsd-5/sys/lib/libkern/../../../common/lib/libc/string 
-I/nbsd/nbsd-5/sys/lib/libkern/../../../common/lib/libc/arch/vax/string 
-I/nbsd/nbsd-5/sys/dist/ipf -c /nbsd/nbsd-5/sys/kern/vfs_dirhash.c
| cc1: warnings being treated as errors
| /nbsd/nbsd-5/sys/kern/vfs_dirhash.c: In function 'dirhash_purge_entries':
| /nbsd/nbsd-5/sys/kern/vfs_dirhash.c:166: error: array subscript is above 
array bounds
| 
| 
| >How-To-Repeat:
| Do the above compile.
| 
| >Fix:
| Looking at the code, a loop runs through the hash entries, and
| stops when the index reaches max value.  Of course, the index value is
| incremented once more (past the end of the array) and that
| value is then used later.
| 
| Backing up the index counter by one should avoid the problem.
| 
| Index: sys/kern/vfs_dirhash.c
| ===================================================================
| RCS file: /cvsroot/src/sys/kern/vfs_dirhash.c,v
| retrieving revision 1.4.2.5
| diff -u -3 -r1.4.2.5 vfs_dirhash.c
| --- sys/kern/vfs_dirhash.c      6 Jan 2009 23:01:49 -0000       1.4.2.5
| +++ sys/kern/vfs_dirhash.c      30 Apr 2009 02:45:47 -0000
| @@ -159,6 +159,7 @@
|                 }
|         }
|         dirh_e = LIST_FIRST(&dirh->free_entries);
| +       hashline--;
| 
|         while (dirh_e) {
|                 LIST_REMOVE(dirh_e, next);

We should pull in the fix from head.

christos



Home | Main Index | Thread Index | Old Index