mac_cred.c (685dc743dc3b5645e34836464128e1c0558b404b) mac_cred.c (ddb3eb4efe55e57c206f3534263c77b837aff1dc)
1/*-
2 * Copyright (c) 1999-2002, 2008-2009 Robert N. M. Watson
3 * Copyright (c) 2001 Ilmar S. Habibulin
4 * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
5 * Copyright (c) 2005 Samy Al Bahra
6 * Copyright (c) 2006 SPARTA, Inc.
7 * Copyright (c) 2008 Apple Inc.
8 * All rights reserved.

--- 195 unchanged lines hidden (view full) ---

204 int error;
205
206 MAC_POLICY_CHECK_NOSLEEP(cred_check_relabel, cred, newlabel);
207 MAC_CHECK_PROBE2(cred_check_relabel, error, cred, newlabel);
208
209 return (error);
210}
211
1/*-
2 * Copyright (c) 1999-2002, 2008-2009 Robert N. M. Watson
3 * Copyright (c) 2001 Ilmar S. Habibulin
4 * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
5 * Copyright (c) 2005 Samy Al Bahra
6 * Copyright (c) 2006 SPARTA, Inc.
7 * Copyright (c) 2008 Apple Inc.
8 * All rights reserved.

--- 195 unchanged lines hidden (view full) ---

204 int error;
205
206 MAC_POLICY_CHECK_NOSLEEP(cred_check_relabel, cred, newlabel);
207 MAC_CHECK_PROBE2(cred_check_relabel, error, cred, newlabel);
208
209 return (error);
210}
211
212/*
213 * Entry hook for setcred().
214 *
215 * Called with no lock held by setcred() so that MAC modules may allocate memory
216 * in preparation for checking privileges. A call to this hook is always
217 * followed by a matching call to mac_cred_setcred_exit(). Between these two,
218 * setcred() may or may not call mac_cred_check_setcred().
219 */
220void
221mac_cred_setcred_enter(void)
222{
223 MAC_POLICY_PERFORM_NOSLEEP(cred_setcred_enter);
224}
225
226MAC_CHECK_PROBE_DEFINE3(cred_check_setcred, "unsigned int", "struct ucred *",
227 "struct ucred *");
228
229/*
230 * Check hook for setcred().
231 *
232 * When called, the current process' lock is held. It thus cannot perform
233 * memory allocations, which must be done in advance in
234 * mac_cred_setcred_enter(). It *MUST NOT* tamper with the process' lock.
235 */
236int
237mac_cred_check_setcred(u_int flags, const struct ucred *old_cred,
238 struct ucred *new_cred)
239{
240 int error;
241
242 MAC_POLICY_CHECK_NOSLEEP(cred_check_setcred, flags, old_cred, new_cred);
243 MAC_CHECK_PROBE3(cred_check_setcred, error, flags, old_cred, new_cred);
244
245 return (error);
246}
247
248/*
249 * Exit hook for setcred().
250 *
251 * Called with no lock held, exactly once per call to mac_cred_setcred_enter().
252 */
253void
254mac_cred_setcred_exit(void)
255{
256 MAC_POLICY_PERFORM_NOSLEEP(cred_setcred_exit);
257}
258
212MAC_CHECK_PROBE_DEFINE2(cred_check_setuid, "struct ucred *", "uid_t");
213
214int
215mac_cred_check_setuid(struct ucred *cred, uid_t uid)
216{
217 int error;
218
219 MAC_POLICY_CHECK_NOSLEEP(cred_check_setuid, cred, uid);

--- 131 unchanged lines hidden ---
259MAC_CHECK_PROBE_DEFINE2(cred_check_setuid, "struct ucred *", "uid_t");
260
261int
262mac_cred_check_setuid(struct ucred *cred, uid_t uid)
263{
264 int error;
265
266 MAC_POLICY_CHECK_NOSLEEP(cred_check_setuid, cred, uid);

--- 131 unchanged lines hidden ---