Bug 569595
| Summary: | posix_fadvise() handles its arguments incorrectly in 32-bit compat mode. [rhel-5.2.z] | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 5 | Reporter: | RHEL Program Management <pm-rhel> | 
| Component: | kernel | Assignee: | Jiri Pirko <jpirko> | 
| Status: | CLOSED ERRATA | QA Contact: | Red Hat Kernel QE team <kernel-qe> | 
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | 5.6 | CC: | clalance, dhoward, emcnabb, jwest, plyons, pm-eus, rkhan, tao, wmealing, yanwang | 
| Target Milestone: | rc | Keywords: | ZStream | 
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2010-03-17 03:18:59 UTC | Type: | --- | 
| Regression: | --- | Mount Type: | --- | 
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | 559410 | ||
| Bug Blocks: | |||
| 
        
          Description
        
        
          RHEL Program Management
        
        
        
        
        
          2010-03-01 19:52:26 UTC
        
       in 2.6.18-92.1.37.el5 Please note that you'll need the followup patch for the Xen kernel as well. That was just posted, and should be integrated into the 5.5 kernel soon. Chris Lalancette reproduce on kernel 2.6.18-92.1.35.el5xen:
# uname -a
Linux dell-pe1950-01.rhts.eng.bos.redhat.com 2.6.18-92.1.35.el5xen #1 SMP Thu Jan 14 13:24:37 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
# strace ./fadvise_test32 
execve("./fadvise_test32", ["./fadvise_test32"], [/* 23 vars */]) = 0
[ Process PID=6158 runs in 32 bit mode. ]
brk(0)                                  = 0x808b000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=81009, ...}) = 0
mmap2(NULL, 81009, PROT_READ, MAP_PRIVATE, 3, 0) = 0xfffffffff7fb2000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000o\267\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1602128, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7fb1000
mmap2(0xb61000, 1320356, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb61000
mmap2(0xc9e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13d) = 0xc9e000
mmap2(0xca1000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xca1000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7fb0000
set_thread_area(0xffdc5404)             = 0
mprotect(0xc9e000, 8192, PROT_READ)     = 0
mprotect(0xb5d000, 4096, PROT_READ)     = 0
munmap(0xf7fb2000, 81009)               = 0
open("/bin/cat", O_RDONLY)              = 3
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = -1 EINVAL (Invalid argument)
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7fc5000
write(1, "ret: 22, fd: 3, offset: 0,len: 8"..., 44ret: 22, fd: 3, offset: 0,len: 8, advise: 0
) = 44
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = -1 EINVAL (Invalid argument)
write(1, "ret: 22, fd: 3, offset: 0,len: 8"..., 44ret: 22, fd: 3, offset: 0,len: 8, advise: 1
) = 44
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = -1 EINVAL (Invalid argument)
write(1, "ret: 22, fd: 3, offset: 0,len: 8"..., 44ret: 22, fd: 3, offset: 0,len: 8, advise: 2
) = 44
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = -1 EINVAL (Invalid argument)
write(1, "ret: 22, fd: 3, offset: 0,len: 8"..., 44ret: 22, fd: 3, offset: 0,len: 8, advise: 3
) = 44
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = -1 EINVAL (Invalid argument)
write(1, "ret: 22, fd: 3, offset: 0,len: 8"..., 44ret: 22, fd: 3, offset: 0,len: 8, advise: 4
) = 44
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = -1 EINVAL (Invalid argument)
write(1, "ret: 22, fd: 3, offset: 0,len: 8"..., 44ret: 22, fd: 3, offset: 0,len: 8, advise: 5
) = 44
close(3)                                = 0
exit_group(0)                           = ?
verify on kernel 2.6.18-92.1.38.el5xen:
# uname -a
Linux dell-pe1950-01.rhts.eng.bos.redhat.com 2.6.18-92.1.38.el5xen #1 SMP Mon Mar 8 12:09:26 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
# strace ./fadvise_test32 
execve("./fadvise_test32", ["./fadvise_test32"], [/* 23 vars */]) = 0
[ Process PID=6265 runs in 32 bit mode. ]
brk(0)                                  = 0x91f2000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=81009, ...}) = 0
mmap2(NULL, 81009, PROT_READ, MAP_PRIVATE, 3, 0) = 0xfffffffff7fd7000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000o\267\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1602128, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7fd6000
mmap2(0xb61000, 1320356, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb61000
mmap2(0xc9e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13d) = 0xc9e000
mmap2(0xca1000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xca1000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7fd5000
set_thread_area(0xffce8d24)             = 0
mprotect(0xc9e000, 8192, PROT_READ)     = 0
mprotect(0xb5d000, 4096, PROT_READ)     = 0
munmap(0xf7fd7000, 81009)               = 0
open("/bin/cat", O_RDONLY)              = 3
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7fea000
write(1, "ret: 0, fd: 3, offset: 0,len: 8,"..., 43ret: 0, fd: 3, offset: 0,len: 8, advise: 0
) = 43
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = 0
write(1, "ret: 0, fd: 3, offset: 0,len: 8,"..., 43ret: 0, fd: 3, offset: 0,len: 8, advise: 1
) = 43
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = 0
write(1, "ret: 0, fd: 3, offset: 0,len: 8,"..., 43ret: 0, fd: 3, offset: 0,len: 8, advise: 2
) = 43
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = 0
write(1, "ret: 0, fd: 3, offset: 0,len: 8,"..., 43ret: 0, fd: 3, offset: 0,len: 8, advise: 3
) = 43
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = 0
write(1, "ret: 0, fd: 3, offset: 0,len: 8,"..., 43ret: 0, fd: 3, offset: 0,len: 8, advise: 4
) = 43
fadvise64(3, 0, 0, 0x8 /* POSIX_FADV_??? */) = 0
write(1, "ret: 0, fd: 3, offset: 0,len: 8,"..., 43ret: 0, fd: 3, offset: 0,len: 8, advise: 5
) = 43
close(3)                                = 0
exit_group(0)                           = ?
additional patch in 2.6.18-92.1.38.el5 An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2010-0148.html |