Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/pgoyette-compat]: src/sys Make do_openat()'s handling of path=NULL modular



details:   https://anonhg.NetBSD.org/src/rev/313dd548f2da
branches:  pgoyette-compat
changeset: 360133:313dd548f2da
user:      pgoyette <pgoyette%NetBSD.org@localhost>
date:      Wed Mar 14 02:24:56 2018 +0000

description:
Make do_openat()'s handling of path=NULL modular

diffstat:

 sys/compat/common/Makefile.sysio    |   5 ++-
 sys/compat/common/compat_mod.c      |  11 +++++-
 sys/compat/common/files.common      |   5 ++-
 sys/compat/common/vfs_syscalls_10.c |  61 +++++++++++++++++++++++++++++++++++++
 sys/kern/vfs_syscalls.c             |  26 ++++++++++-----
 sys/sys/vfs_syscalls.h              |   6 +++-
 6 files changed, 100 insertions(+), 14 deletions(-)

diffs (226 lines):

diff -r 24546fbbbdee -r 313dd548f2da sys/compat/common/Makefile.sysio
--- a/sys/compat/common/Makefile.sysio  Tue Mar 13 21:59:51 2018 +0000
+++ b/sys/compat/common/Makefile.sysio  Wed Mar 14 02:24:56 2018 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile.sysio,v 1.7.18.1 2018/03/13 09:10:31 pgoyette Exp $
+#      $NetBSD: Makefile.sysio,v 1.7.18.2 2018/03/14 02:24:56 pgoyette Exp $
 
 # Sources for syscall and ioctl compatibility across the versions.
 
@@ -9,6 +9,9 @@
 # Compatibility code for NetBSD 0.9
 SRCS+= kern_info_09.c
 
+# Compatability code for NetBSD 1.0
+SRCS+= vfs_syscalls_10.c
+
 # Compatibility code for NetBSD 1.2
 SRCS+= kern_xxx_12.c vfs_syscalls_12.c vm_12.c
 
diff -r 24546fbbbdee -r 313dd548f2da sys/compat/common/compat_mod.c
--- a/sys/compat/common/compat_mod.c    Tue Mar 13 21:59:51 2018 +0000
+++ b/sys/compat/common/compat_mod.c    Wed Mar 14 02:24:56 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: compat_mod.c,v 1.24.14.5 2018/03/13 09:10:31 pgoyette Exp $    */
+/*     $NetBSD: compat_mod.c,v 1.24.14.6 2018/03/14 02:24:56 pgoyette Exp $    */
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.5 2018/03/13 09:10:31 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.6 2018/03/14 02:24:56 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -53,6 +53,7 @@
 #include <sys/syscallargs.h>
 #include <sys/syscallvar.h>
 #include <sys/sysctl.h>
+#include <sys/vfs_syscalls.h>
 
 #include <net/if.h>
 
@@ -275,10 +276,16 @@
                sendsig_sigcontext_vec = sendsig_sigcontext;
 #endif
 #endif
+#ifdef COMPAT_10
+               vfs_syscalls_10_init();
+#endif
                compat_sysctl_init();
                return 0;
 
        case MODULE_CMD_FINI:
+#ifdef COMPAT_10
+               vfs_syscalls_10_fini();
+#endif
 #ifdef COMPAT_16
                /*
                 * Ensure sendsig_sigcontext() is not being used.
diff -r 24546fbbbdee -r 313dd548f2da sys/compat/common/files.common
--- a/sys/compat/common/files.common    Tue Mar 13 21:59:51 2018 +0000
+++ b/sys/compat/common/files.common    Wed Mar 14 02:24:56 2018 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.common,v 1.1.2.7 2018/03/13 09:10:31 pgoyette Exp $
+#      $NetBSD: files.common,v 1.1.2.8 2018/03/14 02:24:56 pgoyette Exp $
 
 #
 # Generic files, used by all compat options.
@@ -25,6 +25,9 @@
 # Compatibility code for NetBSD 0.9
 file   compat/common/kern_info_09.c            compat_netbsd
 
+# Compatability code for NetBSD 1.0
+file   compat/common/vfs_syscalls_10.c         compat_netbsd
+
 # Compatibility code for NetBSD 1.2
 file   compat/common/kern_xxx_12.c             compat_netbsd
 file   compat/common/vfs_syscalls_12.c         compat_netbsd
diff -r 24546fbbbdee -r 313dd548f2da sys/compat/common/vfs_syscalls_10.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/compat/common/vfs_syscalls_10.c       Wed Mar 14 02:24:56 2018 +0000
@@ -0,0 +1,61 @@
+/* $NetBSD: vfs_syscalls_10.c,v 1.1.2.1 2018/03/14 02:24:56 pgoyette Exp $     */
+
+/*-
+ * Copyright (c) 2018 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Paul Goyette
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_10.c,v 1.1.2.1 2018/03/14 02:24:56 pgoyette Exp $");
+ 
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/namei.h>
+#include <sys/vfs_syscalls.h>
+
+static int (*orig_sys_openat_10)(struct pathbuf **);
+
+static int
+real_sys_openat_10(struct pathbuf **pb)
+{
+
+       *pb = pathbuf_create(".");
+       return (*pb == NULL ? ENOMEM : 0);
+}
+
+void vfs_syscalls_10_init(void)
+{
+
+       orig_sys_openat_10 = vec_sys_openat_10;
+       vec_sys_openat_10 = real_sys_openat_10;
+}
+
+void vfs_syscalls_10_fini(void)
+{
+
+       vec_sys_openat_10 = orig_sys_openat_10;
+}
diff -r 24546fbbbdee -r 313dd548f2da sys/kern/vfs_syscalls.c
--- a/sys/kern/vfs_syscalls.c   Tue Mar 13 21:59:51 2018 +0000
+++ b/sys/kern/vfs_syscalls.c   Wed Mar 14 02:24:56 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vfs_syscalls.c,v 1.518 2018/01/09 03:31:13 christos Exp $      */
+/*     $NetBSD: vfs_syscalls.c,v 1.518.2.1 2018/03/14 02:24:56 pgoyette Exp $  */
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.518 2018/01/09 03:31:13 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.518.2.1 2018/03/14 02:24:56 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_fileassoc.h"
@@ -141,6 +141,10 @@
 static int fd_nameiat_simple_user(struct lwp *, int, const char *,
     namei_simple_flags_t, struct vnode **);
 
+/* Routine for COMPAT_10 handling of NULL pathbuf passed to do_sys_openat */
+
+static int stub_sys_openat_10(struct pathbuf **);
+int (*vec_sys_openat_10)(struct pathbuf **) = stub_sys_openat_10;
 
 /*
  * This table is used to maintain compatibility with 4.3BSD
@@ -1629,6 +1633,13 @@
  * and call the device open routine if any.
  */
 static int
+stub_sys_openat_10(struct pathbuf **pb)
+{
+
+       return 0;
+}
+
+static int
 do_sys_openat(lwp_t *l, int fdat, const char *path, int flags,
     int mode, int *fd)
 {
@@ -1637,14 +1648,11 @@
        struct pathbuf *pb;
        int error;
 
-#ifdef COMPAT_10       /* XXX: and perhaps later */
        if (path == NULL) {
-               pb = pathbuf_create(".");
-               if (pb == NULL)
-                       return ENOMEM;
-       } else
-#endif
-       {
+               error = (*vec_sys_openat_10)(&pb);
+               if (error)
+                       return error;
+       } else {
                error = pathbuf_copyin(path, &pb);
                if (error)
                        return error;
diff -r 24546fbbbdee -r 313dd548f2da sys/sys/vfs_syscalls.h
--- a/sys/sys/vfs_syscalls.h    Tue Mar 13 21:59:51 2018 +0000
+++ b/sys/sys/vfs_syscalls.h    Wed Mar 14 02:24:56 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vfs_syscalls.h,v 1.23 2017/07/29 04:02:49 riastradh Exp $        */
+/*     $NetBSD: vfs_syscalls.h,v 1.23.2.1 2018/03/14 02:24:56 pgoyette Exp $        */
 
 /*
  * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -86,4 +86,8 @@
 extern const char *const mountcompatnames[];
 extern const int nmountcompatnames;
 
+extern int (*vec_sys_openat_10)(struct pathbuf **);
+void vfs_syscalls_10_init(void);
+void vfs_syscalls_10_fini(void);
+
 #endif /* _SYS_VFS_SYSCALLS_H_ */



Home | Main Index | Thread Index | Old Index