Patchwork powerpc: Add compat_sys_truncate

login
register
mail settings
Submitter Chase Douglas
Date July 23, 2009, 3:12 p.m.
Message ID <8349EEAE-34B9-4D7E-837F-1320057E59D2@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/30145/
State Accepted, archived
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Chase Douglas - July 23, 2009, 3:12 p.m.
The truncate syscall has a signed long parameter, so when using a 32- 
bit userspace with a 64-bit kernel the argument is zero-extended  
instead of sign-extended. Adding the compat_sys_truncate function  
fixes the issue.

This was noticed during an LSB truncate test failure. The test was  
checking for the correct error number set when truncate is called with  
a length of -1. The test can be found at:

http://bzr.linuxfoundation.org/lsb/devel/runtime-test?cmd=inventory;rev=stewb%40linux-foundation.org-20090626205411-sfb23cc0tjj7jzgm;path=modules/vsx-pcts/tset/POSIX.os/files/truncate/

Signed-off-by: Chase Douglas <cndougla@linux.vnet.ibm.com>

  * proper conversion (sign extension) between the register  
representation of a signed int (msr in 32-bit mode)
Benjamin Herrenschmidt - July 27, 2009, 12:37 a.m.
On Thu, 2009-07-23 at 11:12 -0400, Chase Douglas wrote:
> The truncate syscall has a signed long parameter, so when using a 32- 
> bit userspace with a 64-bit kernel the argument is zero-extended  
> instead of sign-extended. Adding the compat_sys_truncate function  
> fixes the issue.
> 
> This was noticed during an LSB truncate test failure. The test was  
> checking for the correct error number set when truncate is called with  
> a length of -1. The test can be found at:

Hi Chase !

Unfortunately, your patch have been mangled by your mailer
our your mail gateway in about every possible way (word
wrapped, tabs and whitespace damaged etc...)

I'll hand apply this time around but please, look into
fixing your setup :-)

Cheers,
Ben.

> http://bzr.linuxfoundation.org/lsb/devel/runtime-test?cmd=inventory;rev=stewb%40linux-foundation.org-20090626205411-sfb23cc0tjj7jzgm;path=modules/vsx-pcts/tset/POSIX.os/files/truncate/
> 
> Signed-off-by: Chase Douglas <cndougla@linux.vnet.ibm.com>
> 
> diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/ 
> asm/systbl.h
> index 370600c..3cca167 100644
> --- a/arch/powerpc/include/asm/systbl.h
> +++ b/arch/powerpc/include/asm/systbl.h
> @@ -95,7 +95,7 @@ SYSCALL(reboot)
> SYSX(sys_ni_syscall,compat_sys_old_readdir,sys_old_readdir)
> SYSCALL_SPU(mmap)
> SYSCALL_SPU(munmap)
> -SYSCALL_SPU(truncate)
> +COMPAT_SYS_SPU(truncate)
> SYSCALL_SPU(ftruncate)
> SYSCALL_SPU(fchmod)
> SYSCALL_SPU(fchown)
> diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/ 
> sys_ppc32.c
> index bb1cfcf..da9a65b 100644
> --- a/arch/powerpc/kernel/sys_ppc32.c
> +++ b/arch/powerpc/kernel/sys_ppc32.c
> @@ -343,6 +343,12 @@ off_t ppc32_lseek(unsigned int fd, u32 offset,  
> unsigned int origin)
>         return sys_lseek(fd, (int)offset, origin);
> }
> 
> +long compat_sys_truncate(const char __user * path, u32 length)
> +{
> +       /* sign extend length */
> +       return sys_truncate(path, (int)length);
> +}
> +
> /* Note: it is necessary to treat bufsiz as an unsigned int,
>   * with the corresponding cast to a signed int to insure that the
>   * proper conversion (sign extension) between the register  
> representation of a signed int (msr in 32-bit mode)
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Chase Douglas - July 27, 2009, 2:23 a.m.
On Jul 26, 2009, at 8:37 PM, Benjamin Herrenschmidt wrote:
> Unfortunately, your patch have been mangled by your mailer
> our your mail gateway in about every possible way (word
> wrapped, tabs and whitespace damaged etc...)

Sorry about that! I made sure my mailer (OS X's Mail) sent it as plain  
text, but I don't know of any settings for specifying line width or  
white space handling. I'll have to do some more digging or use a  
different mailer for patches.

Thanks,
Chase
Benjamin Herrenschmidt - July 27, 2009, 4:34 a.m.
On Sun, 2009-07-26 at 22:23 -0400, Chase Douglas wrote:
> On Jul 26, 2009, at 8:37 PM, Benjamin Herrenschmidt wrote:
> > Unfortunately, your patch have been mangled by your mailer
> > our your mail gateway in about every possible way (word
> > wrapped, tabs and whitespace damaged etc...)
> 
> Sorry about that! I made sure my mailer (OS X's Mail) sent it as plain  
> text, but I don't know of any settings for specifying line width or  
> white space handling. I'll have to do some more digging or use a  
> different mailer for patches.

I'm sure you can find somebody else using OS X who can help :-)

I've also heard there may be a problem with our vnet servers but
I don't know for sure.

Cheers,
Ben.

Patch

diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/ 
asm/systbl.h
index 370600c..3cca167 100644
--- a/arch/powerpc/include/asm/systbl.h
+++ b/arch/powerpc/include/asm/systbl.h
@@ -95,7 +95,7 @@  SYSCALL(reboot)
SYSX(sys_ni_syscall,compat_sys_old_readdir,sys_old_readdir)
SYSCALL_SPU(mmap)
SYSCALL_SPU(munmap)
-SYSCALL_SPU(truncate)
+COMPAT_SYS_SPU(truncate)
SYSCALL_SPU(ftruncate)
SYSCALL_SPU(fchmod)
SYSCALL_SPU(fchown)
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/ 
sys_ppc32.c
index bb1cfcf..da9a65b 100644
--- a/arch/powerpc/kernel/sys_ppc32.c
+++ b/arch/powerpc/kernel/sys_ppc32.c
@@ -343,6 +343,12 @@  off_t ppc32_lseek(unsigned int fd, u32 offset,  
unsigned int origin)
        return sys_lseek(fd, (int)offset, origin);
}

+long compat_sys_truncate(const char __user * path, u32 length)
+{
+       /* sign extend length */
+       return sys_truncate(path, (int)length);
+}
+
/* Note: it is necessary to treat bufsiz as an unsigned int,
  * with the corresponding cast to a signed int to insure that the