[prev in list] [next in list] [prev in thread] [next in thread] 

List:       netbsd-tech-kern
Subject:    Re: Inconsistency with COMPAT_10
From:       Maxime Villard <max () M00nBSD ! net>
Date:       2014-07-25 17:48:32
Message-ID: 53D29870.3050202 () M00nBSD ! net
[Download RAW message or body]

Le 18/04/2014 10:30, Maxime Villard a écrit :
> Hi all,
> I think there's an inconsistency with COMPAT_10 in the open() syscall:
> 
> ----------------- kern/vfs_syscalls.c - l.1631 ------------------
> 
> #ifdef COMPAT_10	/* XXX: and perhaps later */
> 	if (path == NULL) {
> 		pb = pathbuf_create(".");
> 		if (pb == NULL)
> 			return ENOMEM;
> 	} else
> #endif
> 	{
> 		error = pathbuf_copyin(path, &pb);
> 		if (error)
> 			return error;
> 	}
> 
> -----------------------------------------------------------------
> 
> ------------ compat/netbsd32/netbsd32_netbsd.c - l.240 ----------
> 
> 	if (SCARG(&ua, path) != NULL) {
> 		error = pathbuf_copyin(SCARG(&ua, path), &pb);
> 		if (error)
> 			return error;
> 	} else {
> 		pb = pathbuf_create(".");
> 		if (pb == NULL)
> 			return ENOMEM;
> 	}
> 
> -----------------------------------------------------------------
> 
> COMPAT_10 should be added in netbsd32, or removed from the native
> syscall. But I'm not sure which fix should be applied.
> 
> I guess there's someone around here who knows how to fix that.
> 
> Thanks!
> Maxime
> 

I've kept this issue in my TODO list until now - I told myself I would fix it after
investigating a bit. But now I figure out that I don't have to:

Index: netbsd32_netbsd.c
===================================================================
RCS file: /cvsroot/src/sys/compat/netbsd32/netbsd32_netbsd.c,v
retrieving revision 1.192
diff -u -r1.192 netbsd32_netbsd.c
--- netbsd32_netbsd.c	28 Jun 2014 22:27:50 -0000	1.192
+++ netbsd32_netbsd.c	18 Jul 2014 18:01:38 -0000
@@ -230,28 +230,12 @@
 		syscallarg(mode_t) mode;
 	} */
 	struct sys_open_args ua;
-	struct pathbuf *pb;
-	int error, fd;
 
 	NETBSD32TOP_UAP(path, const char);
 	NETBSD32TO64_UAP(flags);
 	NETBSD32TO64_UAP(mode);
-        
-	if (SCARG(&ua, path) != NULL) {
-		error = pathbuf_copyin(SCARG(&ua, path), &pb);
-		if (error) 
-			return error; 
-	} else {
-		pb = pathbuf_create(".");
-		if (pb == NULL)
-			return ENOMEM;
-	}
-                
-        error = do_open(l, NULL, pb, SCARG(&ua, flags), SCARG(&ua, mode), &fd);
-        pathbuf_destroy(pb);
-	if (error == 0)
-		*retval = fd;
-        return error;
+
+	return sys_open(l, &ua, retval);
 }
 
 int


Just redirect to sys_open(), which will handle the rest. Copied from linux_file.c.

Ok?
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic