Module Name: src Committed By: christos Date: Sun Jan 29 00:16:42 UTC 2017
Modified Files: src/common/lib/libprop: prop_kern.c Log Message: add sized versions of the copyin ioctls To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/common/lib/libprop/prop_kern.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/common/lib/libprop/prop_kern.c diff -u src/common/lib/libprop/prop_kern.c:1.20 src/common/lib/libprop/prop_kern.c:1.21 --- src/common/lib/libprop/prop_kern.c:1.20 Sun Jan 15 13:15:45 2017 +++ src/common/lib/libprop/prop_kern.c Sat Jan 28 19:16:42 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: prop_kern.c,v 1.20 2017/01/15 18:15:45 christos Exp $ */ +/* $NetBSD: prop_kern.c,v 1.21 2017/01/29 00:16:42 christos Exp $ */ /*- * Copyright (c) 2006, 2009 The NetBSD Foundation, Inc. @@ -401,13 +401,13 @@ prop_kern_init(void) static int _prop_object_copyin(const struct plistref *pref, const prop_type_t type, - prop_object_t *objp) + prop_object_t *objp, size_t lim) { prop_object_t obj = NULL; char *buf; int error; - if (pref->pref_len >= prop_object_copyin_limit) + if (pref->pref_len >= lim) return E2BIG; /* @@ -449,12 +449,12 @@ _prop_object_copyin(const struct plistre static int _prop_object_copyin_ioctl(const struct plistref *pref, const prop_type_t type, - const u_long cmd, prop_object_t *objp) + const u_long cmd, prop_object_t *objp, size_t lim) { if ((cmd & IOC_IN) == 0) return (EFAULT); - return _prop_object_copyin(pref, type, objp); + return _prop_object_copyin(pref, type, objp, lim); } /* @@ -462,10 +462,17 @@ _prop_object_copyin_ioctl(const struct p * Copy in an array passed as a syscall arg. */ int +prop_array_copyin_size(const struct plistref *pref, prop_array_t *arrayp, + size_t lim) +{ + return _prop_object_copyin(pref, PROP_TYPE_ARRAY, + (prop_object_t *)arrayp, lim); +} + +int prop_array_copyin(const struct plistref *pref, prop_array_t *arrayp) { - return (_prop_object_copyin(pref, PROP_TYPE_ARRAY, - (prop_object_t *)arrayp)); + return prop_array_copyin_size(pref, arrayp, prop_object_copyin_limit); } /* @@ -473,23 +480,38 @@ prop_array_copyin(const struct plistref * Copy in a dictionary passed as a syscall arg. */ int -prop_dictionary_copyin(const struct plistref *pref, prop_dictionary_t *dictp) +prop_dictionary_copyin_size(const struct plistref *pref, + prop_dictionary_t *dictp, size_t lim) { - return (_prop_object_copyin(pref, PROP_TYPE_DICTIONARY, - (prop_object_t *)dictp)); + return _prop_object_copyin(pref, PROP_TYPE_DICTIONARY, + (prop_object_t *)dictp, lim); } +int +prop_dictionary_copyin(const struct plistref *pref, prop_dictionary_t *dictp) +{ + return prop_dictionary_copyin_size(pref, dictp, + prop_object_copyin_limit); + /* * prop_array_copyin_ioctl -- * Copy in an array send with an ioctl. */ int +prop_array_copyin_ioctl_size(const struct plistref *pref, const u_long cmd, + prop_array_t *arrayp, size_t lim) +{ + return _prop_object_copyin_ioctl(pref, PROP_TYPE_ARRAY, + cmd, (prop_object_t *)arrayp, lim); +} + +int prop_array_copyin_ioctl(const struct plistref *pref, const u_long cmd, - prop_array_t *arrayp) + prop_array_t *arrayp) { - return (_prop_object_copyin_ioctl(pref, PROP_TYPE_ARRAY, - cmd, (prop_object_t *)arrayp)); + return prop_array_copyin_ioctl(pref, cmd, arrayp, + prop_object_copyin_limit); } /* @@ -497,11 +519,19 @@ prop_array_copyin_ioctl(const struct pli * Copy in a dictionary sent with an ioctl. */ int +prop_dictionary_copyin_ioctl_size(const struct plistref *pref, const u_long cmd, + prop_dictionary_t *dictp, size_t lim) +{ + return _prop_object_copyin_ioctl(pref, PROP_TYPE_DICTIONARY, + cmd, (prop_object_t *)dictp, lim); +} + +int prop_dictionary_copyin_ioctl(const struct plistref *pref, const u_long cmd, - prop_dictionary_t *dictp) + prop_dictionary_t *dictp) { - return (_prop_object_copyin_ioctl(pref, PROP_TYPE_DICTIONARY, - cmd, (prop_object_t *)dictp)); + return prop_dictionary_copyin_ioctl(pref, cmd, dictp, + prop_object_copyin_limit); } static int