Module Name: src
Committed By: njoly
Date: Sat Jul 11 07:43:32 UTC 2015
Modified Files:
src/sys/compat/common: if_43.c
Log Message:
Handle case where compat_ifioctl() is called with ocmd != cmd, as found in
compat Linux. Do not crash by ensuring that oifr is correctly set.
Fix crash reported by Robert Swindells on tech-kern@.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/compat/common/if_43.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/if_43.c
diff -u src/sys/compat/common/if_43.c:1.10 src/sys/compat/common/if_43.c:1.11
--- src/sys/compat/common/if_43.c:1.10 Tue May 12 20:42:46 2015
+++ src/sys/compat/common/if_43.c Sat Jul 11 07:43:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: if_43.c,v 1.10 2015/05/12 20:42:46 christos Exp $ */
+/* $NetBSD: if_43.c,v 1.11 2015/07/11 07:43:32 njoly Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1990, 1993
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.10 2015/05/12 20:42:46 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.11 2015/07/11 07:43:32 njoly Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -231,11 +231,11 @@ compat_ifioctl(struct socket *so, u_long
*/
if (cmd == ocmd) {
cmd = compat_cvtcmd(ocmd);
- if (cmd != ocmd) {
- oifr = data;
- data = ifr = &ifrb;
- ifreqo2n(oifr, ifr);
- }
+ }
+ if (cmd != ocmd) {
+ oifr = data;
+ data = ifr = &ifrb;
+ ifreqo2n(oifr, ifr);
}
switch (ocmd) {