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: kernelAssignee: Jiri Pirko <jpirko>
Status: CLOSED ERRATA QA Contact: Red Hat Kernel QE team <kernel-qe>
Severity: high Docs Contact:
Priority: high    
Version: 5.6CC: clalance, dhoward, emcnabb, jwest, plyons, pm-eus, rkhan, tao, wmealing, yanwang
Target Milestone: rcKeywords: 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
This bug has been copied from bug #559410 and has been proposed
to be backported to 5.2 z-stream (EUS).

Comment 3 Jiri Pirko 2010-03-02 14:14:01 UTC
in 2.6.18-92.1.37.el5

Comment 7 Chris Lalancette 2010-03-05 13:39:57 UTC
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

Comment 8 yanfu,wang 2010-03-09 06:21:44 UTC
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)                           = ?

Comment 10 Jiri Pirko 2010-03-09 14:58:48 UTC
additional patch in 2.6.18-92.1.38.el5

Comment 12 errata-xmlrpc 2010-03-17 03:18:59 UTC
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