* [Qemu-devel] [PATCH] uselib, mincore and readahead syscalls
@ 2008-09-17 19:45 Riku Voipio
2008-09-19 8:05 ` Kirill A. Shutemov
0 siblings, 1 reply; 4+ messages in thread
From: Riku Voipio @ 2008-09-17 19:45 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1.1: Type: text/plain, Size: 259 bytes --]
These have been carried in Debian since forever. Added lock_user()
calls for mincore before submitting, I'm not sure if that's the correct
way?
Signed-off-by: Riku Voipio <riku.voipio@iki.fi>
--
"rm -rf" only sounds scary if you don't have backups
[-- Attachment #1.2: 31_syscalls.patch --]
[-- Type: text/plain, Size: 1643 bytes --]
Index: trunk/linux-user/syscall.c
===================================================================
--- trunk.orig/linux-user/syscall.c 2008-09-17 20:07:40.000000000 +0300
+++ trunk/linux-user/syscall.c 2008-09-17 21:43:47.000000000 +0300
@@ -276,6 +276,7 @@
extern int setfsuid(int);
extern int setfsgid(int);
extern int setgroups(int, gid_t *);
+extern int uselib(const char*);
#define ERRNO_TABLE_SIZE 1200
@@ -4226,7 +4227,13 @@
#endif
#ifdef TARGET_NR_uselib
case TARGET_NR_uselib:
- goto unimplemented;
+ {
+ if(!(p = lock_user_string(arg1)))
+ goto efault;
+ ret = get_errno(uselib(path(p)));
+ unlock_user(p, arg1, 0);
+ }
+ break;
#endif
#ifdef TARGET_NR_swapon
case TARGET_NR_swapon:
@@ -5512,7 +5519,18 @@
goto unimplemented;
#ifdef TARGET_NR_mincore
case TARGET_NR_mincore:
- goto unimplemented;
+ {
+ void *a;
+ if (!(a = lock_user(VERIFY_READ, arg1,arg2, 0)))
+ goto efault;
+ if (!(p = lock_user_string(arg3)))
+ goto mincore_fail;
+ ret = get_errno(mincore((void*)a, (size_t)arg2, (unsigned char*)p));
+ unlock_user(p, arg3, ret);
+ mincore_fail:
+ unlock_user(a, arg1, 0);
+ }
+ break;
#endif
#ifdef TARGET_NR_madvise
case TARGET_NR_madvise:
@@ -5652,7 +5670,8 @@
break;
#ifdef TARGET_NR_readahead
case TARGET_NR_readahead:
- goto unimplemented;
+ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
+ break;
#endif
#ifdef TARGET_NR_setxattr
case TARGET_NR_setxattr:
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [Qemu-devel] [PATCH] uselib, mincore and readahead syscalls 2008-09-17 19:45 [Qemu-devel] [PATCH] uselib, mincore and readahead syscalls Riku Voipio @ 2008-09-19 8:05 ` Kirill A. Shutemov 2008-09-19 11:37 ` Riku Voipio 0 siblings, 1 reply; 4+ messages in thread From: Kirill A. Shutemov @ 2008-09-19 8:05 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 2401 bytes --] On Wed, Sep 17, 2008 at 10:45:42PM +0300, Riku Voipio wrote: > These have been carried in Debian since forever. Added lock_user() > calls for mincore before submitting, I'm not sure if that's the correct > way? > > Signed-off-by: Riku Voipio <riku.voipio@iki.fi> > > -- > "rm -rf" only sounds scary if you don't have backups I think this patch should be splited by syscall. > Index: trunk/linux-user/syscall.c > =================================================================== > --- trunk.orig/linux-user/syscall.c 2008-09-17 20:07:40.000000000 +0300 > +++ trunk/linux-user/syscall.c 2008-09-17 21:43:47.000000000 +0300 > @@ -276,6 +276,7 @@ > extern int setfsuid(int); > extern int setfsgid(int); > extern int setgroups(int, gid_t *); > +extern int uselib(const char*); Probably, we should use _syscall1 macros instead. > #define ERRNO_TABLE_SIZE 1200 > > @@ -4226,7 +4227,13 @@ > #endif > #ifdef TARGET_NR_uselib > case TARGET_NR_uselib: > - goto unimplemented; > + { > + if(!(p = lock_user_string(arg1))) > + goto efault; > + ret = get_errno(uselib(path(p))); > + unlock_user(p, arg1, 0); > + } > + break; > #endif > #ifdef TARGET_NR_swapon > case TARGET_NR_swapon: > @@ -5512,7 +5519,18 @@ > goto unimplemented; > #ifdef TARGET_NR_mincore > case TARGET_NR_mincore: > - goto unimplemented; > + { > + void *a; > + if (!(a = lock_user(VERIFY_READ, arg1,arg2, 0))) > + goto efault; > + if (!(p = lock_user_string(arg3))) > + goto mincore_fail; > + ret = get_errno(mincore((void*)a, (size_t)arg2, (unsigned char*)p)); Type casting is unneeded here. > + unlock_user(p, arg3, ret); > + mincore_fail: > + unlock_user(a, arg1, 0); You should set ret here. > + } > + break; > #endif > #ifdef TARGET_NR_madvise > case TARGET_NR_madvise: > @@ -5652,7 +5670,8 @@ > break; > #ifdef TARGET_NR_readahead > case TARGET_NR_readahead: > - goto unimplemented; > + ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); Type casting is unneeded here. > + break; > #endif > #ifdef TARGET_NR_setxattr > case TARGET_NR_setxattr: -- Regards, Kirill A. Shutemov + Belarus, Minsk + ALT Linux Team, http://www.altlinux.com/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] uselib, mincore and readahead syscalls 2008-09-19 8:05 ` Kirill A. Shutemov @ 2008-09-19 11:37 ` Riku Voipio 2008-09-19 11:54 ` Kirill A. Shutemov 0 siblings, 1 reply; 4+ messages in thread From: Riku Voipio @ 2008-09-19 11:37 UTC (permalink / raw) To: qemu-devel On Fri, Sep 19, 2008 at 11:05:35AM +0300, Kirill A. Shutemov wrote: > On Wed, Sep 17, 2008 at 10:45:42PM +0300, Riku Voipio wrote: > > These have been carried in Debian since forever. Added lock_user() > > calls for mincore before submitting, I'm not sure if that's the correct > > way? > > > > Signed-off-by: Riku Voipio <riku.voipio@iki.fi> > I think this patch should be splited by syscall. Yes, but expecting that these patches as going to be ignored I didn't want to put too much effort in them.. > > Index: trunk/linux-user/syscall.c > > =================================================================== > > --- trunk.orig/linux-user/syscall.c 2008-09-17 20:07:40.000000000 +0300 > > +++ trunk/linux-user/syscall.c 2008-09-17 21:43:47.000000000 +0300 > > @@ -276,6 +276,7 @@ > > extern int setfsuid(int); > > extern int setfsgid(int); > > extern int setgroups(int, gid_t *); > > +extern int uselib(const char*); > Probably, we should use _syscall1 macros instead. Why? More specifically, in which cases should we use _syscall macros and which cases the libc versions? I don't see much logic in the current mix of both being used in syscall.c > > #define ERRNO_TABLE_SIZE 1200 > > > > @@ -4226,7 +4227,13 @@ > > #endif > > #ifdef TARGET_NR_uselib > > case TARGET_NR_uselib: > > - goto unimplemented; > > + { > > + if(!(p = lock_user_string(arg1))) > > + goto efault; > > + ret = get_errno(uselib(path(p))); > > + unlock_user(p, arg1, 0); > > + } > > + break; > > #endif > > #ifdef TARGET_NR_swapon > > case TARGET_NR_swapon: > > @@ -5512,7 +5519,18 @@ > > goto unimplemented; > > #ifdef TARGET_NR_mincore > > case TARGET_NR_mincore: > > - goto unimplemented; > > + { > > + void *a; > > + if (!(a = lock_user(VERIFY_READ, arg1,arg2, 0))) > > + goto efault; > > + if (!(p = lock_user_string(arg3))) > > + goto mincore_fail; > > + ret = get_errno(mincore((void*)a, (size_t)arg2, (unsigned char*)p)); > > Type casting is unneeded here. Will fix > > + unlock_user(p, arg3, ret); > > + mincore_fail: > > + unlock_user(a, arg1, 0); > You should set ret here. Will fix > > + } > > + break; > > #endif > > #ifdef TARGET_NR_madvise > > case TARGET_NR_madvise: > > @@ -5652,7 +5670,8 @@ > > break; > > #ifdef TARGET_NR_readahead > > case TARGET_NR_readahead: > > - goto unimplemented; > > + ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); > > Type casting is unneeded here. Will fix > > + break; > > #endif > > #ifdef TARGET_NR_setxattr > > case TARGET_NR_setxattr: > > -- > Regards, Kirill A. Shutemov > + Belarus, Minsk > + ALT Linux Team, http://www.altlinux.com/ -- "rm -rf" only sounds scary if you don't have backups ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] uselib, mincore and readahead syscalls 2008-09-19 11:37 ` Riku Voipio @ 2008-09-19 11:54 ` Kirill A. Shutemov 0 siblings, 0 replies; 4+ messages in thread From: Kirill A. Shutemov @ 2008-09-19 11:54 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 3343 bytes --] On Fri, Sep 19, 2008 at 02:37:13PM +0300, Riku Voipio wrote: > On Fri, Sep 19, 2008 at 11:05:35AM +0300, Kirill A. Shutemov wrote: > > On Wed, Sep 17, 2008 at 10:45:42PM +0300, Riku Voipio wrote: > > > These have been carried in Debian since forever. Added lock_user() > > > calls for mincore before submitting, I'm not sure if that's the correct > > > way? > > > > > > Signed-off-by: Riku Voipio <riku.voipio@iki.fi> > > > I think this patch should be splited by syscall. > > Yes, but expecting that these patches as going to be ignored I didn't > want to put too much effort in them.. > > > > Index: trunk/linux-user/syscall.c > > > =================================================================== > > > --- trunk.orig/linux-user/syscall.c 2008-09-17 20:07:40.000000000 +0300 > > > +++ trunk/linux-user/syscall.c 2008-09-17 21:43:47.000000000 +0300 > > > @@ -276,6 +276,7 @@ > > > extern int setfsuid(int); > > > extern int setfsgid(int); > > > extern int setgroups(int, gid_t *); > > > +extern int uselib(const char*); > > > Probably, we should use _syscall1 macros instead. > > Why? More specifically, in which cases should we use _syscall macros > and which cases the libc versions? I don't see much logic in the current > mix of both being used in syscall.c Sorry. I'm wrong. > > > > #define ERRNO_TABLE_SIZE 1200 > > > > > > @@ -4226,7 +4227,13 @@ > > > #endif > > > #ifdef TARGET_NR_uselib > > > case TARGET_NR_uselib: > > > - goto unimplemented; > > > + { > > > + if(!(p = lock_user_string(arg1))) > > > + goto efault; > > > + ret = get_errno(uselib(path(p))); > > > + unlock_user(p, arg1, 0); > > > + } > > > + break; > > > #endif > > > #ifdef TARGET_NR_swapon > > > case TARGET_NR_swapon: > > > @@ -5512,7 +5519,18 @@ > > > goto unimplemented; > > > #ifdef TARGET_NR_mincore > > > case TARGET_NR_mincore: > > > - goto unimplemented; > > > + { > > > + void *a; > > > + if (!(a = lock_user(VERIFY_READ, arg1,arg2, 0))) > > > + goto efault; > > > + if (!(p = lock_user_string(arg3))) > > > + goto mincore_fail; > > > + ret = get_errno(mincore((void*)a, (size_t)arg2, (unsigned char*)p)); > > > > Type casting is unneeded here. > > Will fix > > > > + unlock_user(p, arg3, ret); > > > + mincore_fail: > > > + unlock_user(a, arg1, 0); > > > You should set ret here. > > Will fix > > > > + } > > > + break; > > > #endif > > > #ifdef TARGET_NR_madvise > > > case TARGET_NR_madvise: > > > @@ -5652,7 +5670,8 @@ > > > break; > > > #ifdef TARGET_NR_readahead > > > case TARGET_NR_readahead: > > > - goto unimplemented; > > > + ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3)); > > > > Type casting is unneeded here. > > Will fix > > > > + break; > > > #endif > > > #ifdef TARGET_NR_setxattr > > > case TARGET_NR_setxattr: > > > > -- > > Regards, Kirill A. Shutemov > > + Belarus, Minsk > > + ALT Linux Team, http://www.altlinux.com/ > > > > -- > "rm -rf" only sounds scary if you don't have backups > > -- Regards, Kirill A. Shutemov + Belarus, Minsk + ALT Linux Team, http://www.altlinux.com/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-09-19 11:53 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-09-17 19:45 [Qemu-devel] [PATCH] uselib, mincore and readahead syscalls Riku Voipio 2008-09-19 8:05 ` Kirill A. Shutemov 2008-09-19 11:37 ` Riku Voipio 2008-09-19 11:54 ` Kirill A. Shutemov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).