public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH]: Don't force O_LARGEFILE for 32 bit processes on ia64 - 2.6.12-rc3
@ 2005-05-09 21:47 Yoav Zach
  2005-05-10  1:45 ` Jeff Garzik
  2005-05-10  6:47 ` Anton Blanchard
  0 siblings, 2 replies; 6+ messages in thread
From: Yoav Zach @ 2005-05-09 21:47 UTC (permalink / raw)
  To: torvalds; +Cc: lkml, Yoav Zach

In ia64 kernel, the O_LARGEFILE flag is forced when
opening a file. This is problematic for execution of
32 bit processes, which are not largefile aware, either
by SW emulation or by HW execution.
For such processes, the problem is two-fold:
1) When trying to open a file that is larger than 4G
   the operation should fail, but it's not
2) Writing to offset larger than 4G should fail, but
   it's not

The proposed patch takes advantage of the way 32 bit
processes are identified in ia64 systems. Such 
processes have PER_LINUX32 for their personality. With
the patch, the ia64 kernel will not enforce the O_LARGEFILE
flag if the current process has PER_LINUX32 set.
The behavior for all other architectures remains unchanged.

The patch is against 2.6.12-rc3.

Signed-off-by: Yoav Zach <yoav.zach@intel.com>
Acked-by: Tony Luck <tony.luck@intel.com>
============================================================================================
diff -r -U 3 -p -N linux-2.6.12-rc3/fs/open.c linux/fs/open.c
--- linux-2.6.12-rc3/fs/open.c	2005-04-21 03:03:15.000000000 +0300
+++ linux/fs/open.c	2005-05-09 23:50:08.000000000 +0300
@@ -21,6 +21,7 @@
 #include <linux/vfs.h>
 #include <asm/uaccess.h>
 #include <linux/fs.h>
+#include <linux/personality.h>
 #include <linux/pagemap.h>
 #include <linux/syscalls.h>
 
@@ -935,9 +936,9 @@ asmlinkage long sys_open(const char __us
 	char * tmp;
 	int fd, error;
 
-#if BITS_PER_LONG != 32
-	flags |= O_LARGEFILE;
-#endif
+	if (force_o_largefile())
+		flags |= O_LARGEFILE;
+
 	tmp = getname(filename);
 	fd = PTR_ERR(tmp);
 	if (!IS_ERR(tmp)) {
diff -r -U 3 -p -N linux-2.6.12-rc3/include/asm-ia64/fcntl.h linux/include/asm-ia64/fcntl.h
--- linux-2.6.12-rc3/include/asm-ia64/fcntl.h	2005-04-21 03:03:16.000000000 +0300
+++ linux/include/asm-ia64/fcntl.h	2005-05-09 23:51:53.000000000 +0300
@@ -81,4 +81,6 @@ struct flock {
 
 #define F_LINUX_SPECIFIC_BASE	1024
 
+#define force_o_largefile() ( ! (current->personality & PER_LINUX32) )
+
 #endif /* _ASM_IA64_FCNTL_H */
diff -r -U 3 -p -N linux-2.6.12-rc3/include/linux/fcntl.h linux/include/linux/fcntl.h
--- linux-2.6.12-rc3/include/linux/fcntl.h	2005-04-21 03:03:16.000000000 +0300
+++ linux/include/linux/fcntl.h	2005-05-09 23:51:46.000000000 +0300
@@ -25,6 +25,10 @@
 
 #ifdef __KERNEL__
 
+#ifndef force_o_largefile
+#define force_o_largefile() (BITS_PER_LONG != 32)
+#endif
+
 #if BITS_PER_LONG == 32
 #define IS_GETLK32(cmd)		((cmd) == F_GETLK)
 #define IS_SETLK32(cmd)		((cmd) == F_SETLK)
============================================================================================


Thanks,
Yoav.


Yoav Zach
IA-32 Execution Layer
Performance Tools Lab
Intel Corp.



		
__________________________________ 
Do you Yahoo!? 
Read only the mail you want - Yahoo! Mail SpamGuard. 
http://promotions.yahoo.com/new_mail 

^ permalink raw reply	[flat|nested] 6+ messages in thread
* RE: [PATCH]: Don't force O_LARGEFILE for 32 bit processes on ia64 - 2.6.12-rc3
@ 2005-05-10 21:45 Zach, Yoav
  0 siblings, 0 replies; 6+ messages in thread
From: Zach, Yoav @ 2005-05-10 21:45 UTC (permalink / raw)
  To: David S. Miller, anton; +Cc: yoav_zach, torvalds, linux-kernel, Zach, Yoav

 

>-----Original Message-----
>From: David S. Miller [mailto:davem@davemloft.net] 
>Sent: Tuesday, May 10, 2005 21:47
>To: anton@samba.org
>Cc: yoav_zach@yahoo.com; torvalds@osdl.org; 
>linux-kernel@vger.kernel.org; Zach, Yoav
>Subject: Re: [PATCH]: Don't force O_LARGEFILE for 32 bit 
>processes on ia64 - 2.6.12-rc3
>
>
>I really think these "emulators" should execute the compat
>syscalls and not the native 64-bit ones.  That is where
>all of these problems come from.
>

Compat syscalls are not accessible to userland. Changing that
will be a major change, with impacts on security and all. I'm
not sure it worth the effort.

>And yes, as Anton stated, you need to audit every platform's
>compat layer to make sure this PER_LINUX32 thing doesn't break
>anything for them.
>

The patch has no impact at all on any arch other than ia64.

Thanks,
Yoav.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2005-05-10 21:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-09 21:47 [PATCH]: Don't force O_LARGEFILE for 32 bit processes on ia64 - 2.6.12-rc3 Yoav Zach
2005-05-10  1:45 ` Jeff Garzik
2005-05-10  5:15   ` tony.luck
2005-05-10  6:47 ` Anton Blanchard
2005-05-10 16:15   ` tony.luck
  -- strict thread matches above, loose matches on Subject: below --
2005-05-10 21:45 Zach, Yoav

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox