Module Name: src Committed By: msaitoh Date: Mon Jun 30 10:53:59 UTC 2014
Modified Files: src/sys/compat/freebsd [netbsd-5]: freebsd_sched.c Log Message: Pull up following revision(s) (requested by maxv in ticket #1909): sys/compat/freebsd/freebsd_sched.c 1.20-1.21 Avoid NULL dereference and fix sched param conversion (at least make it do something). Pointed out by Maxime Villard. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.19.10.1 src/sys/compat/freebsd/freebsd_sched.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/freebsd/freebsd_sched.c diff -u src/sys/compat/freebsd/freebsd_sched.c:1.19 src/sys/compat/freebsd/freebsd_sched.c:1.19.10.1 --- src/sys/compat/freebsd/freebsd_sched.c:1.19 Mon Apr 28 20:23:41 2008 +++ src/sys/compat/freebsd/freebsd_sched.c Mon Jun 30 10:53:59 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_sched.c,v 1.19 2008/04/28 20:23:41 martin Exp $ */ +/* $NetBSD: freebsd_sched.c,v 1.19.10.1 2014/06/30 10:53:59 msaitoh Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: freebsd_sched.c,v 1.19 2008/04/28 20:23:41 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: freebsd_sched.c,v 1.19.10.1 2014/06/30 10:53:59 msaitoh Exp $"); #include <sys/param.h> #include <sys/mount.h> @@ -62,72 +62,72 @@ freebsd_sys_yield(struct lwp *l, const v */ static int sched_freebsd2native(int freebsd_policy, - struct freebsd_sched_param *freebsd_params, int *native_policy, + const struct freebsd_sched_param *freebsd_params, int *native_policy, struct sched_param *native_params) { - int error; - - error = 0; + int p; switch (freebsd_policy) { case FREEBSD_SCHED_OTHER: - *native_policy = SCHED_OTHER; + p = SCHED_OTHER; break; case FREEBSD_SCHED_FIFO: - *native_policy = SCHED_FIFO; + p = SCHED_FIFO; break; case FREEBSD_SCHED_RR: - *native_policy = SCHED_RR; + p = SCHED_RR; break; default: - error = EINVAL; - break; + return EINVAL; } - if (freebsd_params != NULL && native_params != NULL && !error) { - native_params = (struct sched_param *)freebsd_params; + if (native_policy != NULL) + *native_policy = p; + + if (freebsd_params != NULL && native_params != NULL) { + /* XXX: Needs adjustment to do a proper conversion. */ + native_params->sched_priority = freebsd_params->sched_priority; } - - return (error); + return 0; } /* - * XXX: Needs adjustment to do a proper conversion. */ static int -sched_native2freebsd(int native_policy, struct sched_param *native_params, +sched_native2freebsd(int native_policy, const struct sched_param *native_params, int *freebsd_policy, struct freebsd_sched_param *freebsd_params) { - int error; - - error = 0; + int p; switch (native_policy) { case SCHED_OTHER: - *freebsd_policy = FREEBSD_SCHED_OTHER; + p = FREEBSD_SCHED_OTHER; break; case SCHED_FIFO: - *freebsd_policy = FREEBSD_SCHED_FIFO; + p = FREEBSD_SCHED_FIFO; break; case SCHED_RR: - *freebsd_policy = FREEBSD_SCHED_RR; + p = FREEBSD_SCHED_RR; break; default: - error = EINVAL; - break; + return EINVAL; } - if (native_params != NULL && freebsd_params != NULL && !error) { - freebsd_params = (struct freebsd_sched_param *)native_params; + if (freebsd_policy != NULL) + *freebsd_policy = p; + + if (native_params != NULL && freebsd_params != NULL) { + /* XXX: Needs adjustment to do a proper conversion. */ + freebsd_params->sched_priority = native_params->sched_priority; } - - return (error); + + return 0; } int @@ -199,7 +199,7 @@ freebsd_sys_sched_getparam(struct lwp *l goto out; out: - return (error); + return error; } int