Module Name: src
Committed By: snj
Date: Wed Aug 9 05:12:19 UTC 2017
Modified Files:
src/sys/compat/common [netbsd-8]: vfs_syscalls_12.c vfs_syscalls_43.c
src/sys/compat/ibcs2 [netbsd-8]: ibcs2_misc.c
src/sys/compat/linux/common [netbsd-8]: linux_file64.c linux_misc.c
src/sys/compat/linux32/common [netbsd-8]: linux32_dirent.c
src/sys/compat/osf1 [netbsd-8]: osf1_file.c
src/sys/compat/sunos [netbsd-8]: sunos_misc.c
src/sys/compat/sunos32 [netbsd-8]: sunos32_misc.c
src/sys/compat/svr4 [netbsd-8]: svr4_misc.c
src/sys/compat/svr4_32 [netbsd-8]: svr4_32_misc.c
src/sys/rump/kern/lib/libsys_sunos [netbsd-8]: rump_sunos_compat.c
Log Message:
Pull up following revision(s) (requested by spz in ticket #193):
sys/compat/common/vfs_syscalls_12.c: revision 1.34
sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c: revision 1.2
sys/compat/svr4_32/svr4_32_misc.c: revision 1.78
sys/compat/sunos32/sunos32_misc.c: revision 1.78
sys/compat/linux/common/linux_misc.c: revision 1.239
sys/compat/osf1/osf1_file.c: revision 1.44
sys/compat/common/vfs_syscalls_43.c: revision 1.60
sys/compat/svr4/svr4_misc.c: revision 1.158
sys/compat/ibcs2/ibcs2_misc.c: revision 1.114
sys/compat/linux/common/linux_file64.c: revision 1.59
sys/compat/linux32/common/linux32_dirent.c: revision 1.18
sys/compat/sunos/sunos_misc.c: revision 1.171
Fail, don't panic, on bad dirents from file system.
Controllable via puffs from userland.
>From Ilja Van Sprundel.
To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.33.8.1 src/sys/compat/common/vfs_syscalls_12.c
cvs rdiff -u -r1.59 -r1.59.8.1 src/sys/compat/common/vfs_syscalls_43.c
cvs rdiff -u -r1.113 -r1.113.12.1 src/sys/compat/ibcs2/ibcs2_misc.c
cvs rdiff -u -r1.58 -r1.58.6.1 src/sys/compat/linux/common/linux_file64.c
cvs rdiff -u -r1.238 -r1.238.2.1 src/sys/compat/linux/common/linux_misc.c
cvs rdiff -u -r1.17 -r1.17.6.1 src/sys/compat/linux32/common/linux32_dirent.c
cvs rdiff -u -r1.43 -r1.43.12.1 src/sys/compat/osf1/osf1_file.c
cvs rdiff -u -r1.170 -r1.170.10.1 src/sys/compat/sunos/sunos_misc.c
cvs rdiff -u -r1.77 -r1.77.10.1 src/sys/compat/sunos32/sunos32_misc.c
cvs rdiff -u -r1.157 -r1.157.8.1 src/sys/compat/svr4/svr4_misc.c
cvs rdiff -u -r1.77 -r1.77.8.1 src/sys/compat/svr4_32/svr4_32_misc.c
cvs rdiff -u -r1.1 -r1.1.32.1 \
src/sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/compat/common/vfs_syscalls_12.c
diff -u src/sys/compat/common/vfs_syscalls_12.c:1.33 src/sys/compat/common/vfs_syscalls_12.c:1.33.8.1
--- src/sys/compat/common/vfs_syscalls_12.c:1.33 Fri Jan 13 22:29:59 2017
+++ src/sys/compat/common/vfs_syscalls_12.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_12.c,v 1.33 2017/01/13 22:29:59 christos Exp $ */
+/* $NetBSD: vfs_syscalls_12.c,v 1.33.8.1 2017/08/09 05:12:18 snj Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_12.c,v 1.33 2017/01/13 22:29:59 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_12.c,v 1.33.8.1 2017/08/09 05:12:18 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -171,8 +171,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic(__func__);
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
Index: src/sys/compat/common/vfs_syscalls_43.c
diff -u src/sys/compat/common/vfs_syscalls_43.c:1.59 src/sys/compat/common/vfs_syscalls_43.c:1.59.8.1
--- src/sys/compat/common/vfs_syscalls_43.c:1.59 Fri Jan 13 20:25:35 2017
+++ src/sys/compat/common/vfs_syscalls_43.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_43.c,v 1.59 2017/01/13 20:25:35 christos Exp $ */
+/* $NetBSD: vfs_syscalls_43.c,v 1.59.8.1 2017/08/09 05:12:18 snj Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.59 2017/01/13 20:25:35 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.59.8.1 2017/08/09 05:12:18 snj Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -451,8 +451,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic(__func__);
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
Index: src/sys/compat/ibcs2/ibcs2_misc.c
diff -u src/sys/compat/ibcs2/ibcs2_misc.c:1.113 src/sys/compat/ibcs2/ibcs2_misc.c:1.113.12.1
--- src/sys/compat/ibcs2/ibcs2_misc.c:1.113 Fri Sep 5 09:21:54 2014
+++ src/sys/compat/ibcs2/ibcs2_misc.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ibcs2_misc.c,v 1.113 2014/09/05 09:21:54 matt Exp $ */
+/* $NetBSD: ibcs2_misc.c,v 1.113.12.1 2017/08/09 05:12:18 snj Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -95,7 +95,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ibcs2_misc.c,v 1.113 2014/09/05 09:21:54 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibcs2_misc.c,v 1.113.12.1 2017/08/09 05:12:18 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -427,8 +427,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("ibcs2_getdents: bad reclen");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (cookie && (*cookie >> 32) != 0) {
compat_offseterr(vp, "ibcs2_getdents");
error = EINVAL;
Index: src/sys/compat/linux/common/linux_file64.c
diff -u src/sys/compat/linux/common/linux_file64.c:1.58 src/sys/compat/linux/common/linux_file64.c:1.58.6.1
--- src/sys/compat/linux/common/linux_file64.c:1.58 Sat Jan 28 15:01:01 2017
+++ src/sys/compat/linux/common/linux_file64.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_file64.c,v 1.58 2017/01/28 15:01:01 christos Exp $ */
+/* $NetBSD: linux_file64.c,v 1.58.6.1 2017/08/09 05:12:18 snj Exp $ */
/*-
* Copyright (c) 1995, 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_file64.c,v 1.58 2017/01/28 15:01:01 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_file64.c,v 1.58.6.1 2017/08/09 05:12:18 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -325,8 +325,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("linux_readdir");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
Index: src/sys/compat/linux/common/linux_misc.c
diff -u src/sys/compat/linux/common/linux_misc.c:1.238 src/sys/compat/linux/common/linux_misc.c:1.238.2.1
--- src/sys/compat/linux/common/linux_misc.c:1.238 Sat May 6 21:34:51 2017
+++ src/sys/compat/linux/common/linux_misc.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_misc.c,v 1.238 2017/05/06 21:34:51 joerg Exp $ */
+/* $NetBSD: linux_misc.c,v 1.238.2.1 2017/08/09 05:12:18 snj Exp $ */
/*-
* Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.238 2017/05/06 21:34:51 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.238.2.1 2017/08/09 05:12:18 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -748,8 +748,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("linux_readdir");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
Index: src/sys/compat/linux32/common/linux32_dirent.c
diff -u src/sys/compat/linux32/common/linux32_dirent.c:1.17 src/sys/compat/linux32/common/linux32_dirent.c:1.17.6.1
--- src/sys/compat/linux32/common/linux32_dirent.c:1.17 Sat Jan 28 21:54:57 2017
+++ src/sys/compat/linux32/common/linux32_dirent.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: linux32_dirent.c,v 1.17 2017/01/28 21:54:57 christos Exp $ */
+/* $NetBSD: linux32_dirent.c,v 1.17.6.1 2017/08/09 05:12:18 snj Exp $ */
/*-
* Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_dirent.c,v 1.17 2017/01/28 21:54:57 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_dirent.c,v 1.17.6.1 2017/08/09 05:12:18 snj Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -178,8 +178,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("linux32_readdir");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
Index: src/sys/compat/osf1/osf1_file.c
diff -u src/sys/compat/osf1/osf1_file.c:1.43 src/sys/compat/osf1/osf1_file.c:1.43.12.1
--- src/sys/compat/osf1/osf1_file.c:1.43 Fri Sep 5 09:21:54 2014
+++ src/sys/compat/osf1/osf1_file.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_file.c,v 1.43 2014/09/05 09:21:54 matt Exp $ */
+/* $NetBSD: osf1_file.c,v 1.43.12.1 2017/08/09 05:12:18 snj Exp $ */
/*
* Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_file.c,v 1.43 2014/09/05 09:21:54 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_file.c,v 1.43.12.1 2017/08/09 05:12:18 snj Exp $");
#if defined(_KERNEL_OPT)
#include "opt_syscall_debug.h"
@@ -201,8 +201,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("osf1_sys_getdirentries: bad reclen");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (cookie)
off = *cookie++; /* each entry points to the next */
else
Index: src/sys/compat/sunos/sunos_misc.c
diff -u src/sys/compat/sunos/sunos_misc.c:1.170 src/sys/compat/sunos/sunos_misc.c:1.170.10.1
--- src/sys/compat/sunos/sunos_misc.c:1.170 Fri Oct 23 19:40:11 2015
+++ src/sys/compat/sunos/sunos_misc.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sunos_misc.c,v 1.170 2015/10/23 19:40:11 maxv Exp $ */
+/* $NetBSD: sunos_misc.c,v 1.170.10.1 2017/08/09 05:12:18 snj Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -50,7 +50,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunos_misc.c,v 1.170 2015/10/23 19:40:11 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunos_misc.c,v 1.170.10.1 2017/08/09 05:12:18 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -414,8 +414,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("sunos_getdents");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if ((*cookie >> 32) != 0) {
compat_offseterr(vp, "sunos_getdents");
error = EINVAL;
Index: src/sys/compat/sunos32/sunos32_misc.c
diff -u src/sys/compat/sunos32/sunos32_misc.c:1.77 src/sys/compat/sunos32/sunos32_misc.c:1.77.10.1
--- src/sys/compat/sunos32/sunos32_misc.c:1.77 Sun Feb 28 23:24:35 2016
+++ src/sys/compat/sunos32/sunos32_misc.c Wed Aug 9 05:12:18 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sunos32_misc.c,v 1.77 2016/02/28 23:24:35 khorben Exp $ */
+/* $NetBSD: sunos32_misc.c,v 1.77.10.1 2017/08/09 05:12:18 snj Exp $ */
/* from :NetBSD: sunos_misc.c,v 1.107 2000/12/01 19:25:10 jdolecek Exp */
/*
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunos32_misc.c,v 1.77 2016/02/28 23:24:35 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunos32_misc.c,v 1.77.10.1 2017/08/09 05:12:18 snj Exp $");
#define COMPAT_SUNOS 1
@@ -659,8 +659,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("sunos_getdents");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (cookie && (*cookie >> 32) != 0) {
compat_offseterr(vp, "sunos_getdents");
error = EINVAL;
Index: src/sys/compat/svr4/svr4_misc.c
diff -u src/sys/compat/svr4/svr4_misc.c:1.157 src/sys/compat/svr4/svr4_misc.c:1.157.8.1
--- src/sys/compat/svr4/svr4_misc.c:1.157 Thu Nov 10 17:00:51 2016
+++ src/sys/compat/svr4/svr4_misc.c Wed Aug 9 05:12:19 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_misc.c,v 1.157 2016/11/10 17:00:51 christos Exp $ */
+/* $NetBSD: svr4_misc.c,v 1.157.8.1 2017/08/09 05:12:19 snj Exp $ */
/*-
* Copyright (c) 1994, 2008 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_misc.c,v 1.157 2016/11/10 17:00:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_misc.c,v 1.157.8.1 2017/08/09 05:12:19 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -264,8 +264,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("svr4_getdents64: bad reclen");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
@@ -388,8 +390,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("svr4_getdents: bad reclen");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (cookie)
off = *cookie++; /* each entry points to the next */
else
Index: src/sys/compat/svr4_32/svr4_32_misc.c
diff -u src/sys/compat/svr4_32/svr4_32_misc.c:1.77 src/sys/compat/svr4_32/svr4_32_misc.c:1.77.8.1
--- src/sys/compat/svr4_32/svr4_32_misc.c:1.77 Thu Nov 10 17:00:51 2016
+++ src/sys/compat/svr4_32/svr4_32_misc.c Wed Aug 9 05:12:19 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_32_misc.c,v 1.77 2016/11/10 17:00:51 christos Exp $ */
+/* $NetBSD: svr4_32_misc.c,v 1.77.8.1 2017/08/09 05:12:19 snj Exp $ */
/*-
* Copyright (c) 1994, 2008 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_32_misc.c,v 1.77 2016/11/10 17:00:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_32_misc.c,v 1.77.8.1 2017/08/09 05:12:19 snj Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -263,8 +263,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("svr4_32_getdents64: bad reclen");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if (bdp->d_fileno == 0) {
inp += reclen; /* it is a hole; squish it out */
if (cookie)
Index: src/sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c
diff -u src/sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c:1.1 src/sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c:1.1.32.1
--- src/sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c:1.1 Tue Apr 9 13:08:33 2013
+++ src/sys/rump/kern/lib/libsys_sunos/rump_sunos_compat.c Wed Aug 9 05:12:19 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rump_sunos_compat.c,v 1.1 2013/04/09 13:08:33 pooka Exp $ */
+/* $NetBSD: rump_sunos_compat.c,v 1.1.32.1 2017/08/09 05:12:19 snj Exp $ */
/*
* Copyright (c) 2013 Antti Kantee. All Rights Reserved.
@@ -313,8 +313,10 @@ again:
for (cookie = cookiebuf; len > 0; len -= reclen) {
bdp = (struct dirent *)inp;
reclen = bdp->d_reclen;
- if (reclen & 3)
- panic("sunos_getdents");
+ if (reclen & 3) {
+ error = EIO;
+ goto out;
+ }
if ((*cookie >> 32) != 0) {
printf("rump_sunos_sys_getdents: offset too large\n");
error = EINVAL;