diff options
Diffstat (limited to 'net/netlabel/netlabel_kapi.c')
| -rw-r--r-- | net/netlabel/netlabel_kapi.c | 31 | 
1 files changed, 28 insertions, 3 deletions
diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c index 1ba4f58e1d35..cd9160bbc919 100644 --- a/net/netlabel/netlabel_kapi.c +++ b/net/netlabel/netlabel_kapi.c @@ -965,6 +965,7 @@ int netlbl_enabled(void)   * @sk: the socket to label   * @family: protocol family   * @secattr: the security attributes + * @sk_locked: true if caller holds the socket lock   *   * Description:   * Attach the correct label to the given socket using the security attributes @@ -977,7 +978,8 @@ int netlbl_enabled(void)   */  int netlbl_sock_setattr(struct sock *sk,  			u16 family, -			const struct netlbl_lsm_secattr *secattr) +			const struct netlbl_lsm_secattr *secattr, +			bool sk_locked)  {  	int ret_val;  	struct netlbl_dom_map *dom_entry; @@ -997,7 +999,7 @@ int netlbl_sock_setattr(struct sock *sk,  		case NETLBL_NLTYPE_CIPSOV4:  			ret_val = cipso_v4_sock_setattr(sk,  							dom_entry->def.cipso, -							secattr); +							secattr, sk_locked);  			break;  		case NETLBL_NLTYPE_UNLABELED:  			ret_val = 0; @@ -1091,6 +1093,28 @@ int netlbl_sock_getattr(struct sock *sk,  }  /** + * netlbl_sk_lock_check - Check if the socket lock has been acquired. + * @sk: the socket to be checked + * + * Return: true if socket @sk is locked or if lock debugging is disabled at + * runtime or compile-time; false otherwise + * + */ +#ifdef CONFIG_LOCKDEP +bool netlbl_sk_lock_check(struct sock *sk) +{ +	if (debug_locks) +		return lockdep_sock_is_held(sk); +	return true; +} +#else +bool netlbl_sk_lock_check(struct sock *sk) +{ +	return true; +} +#endif + +/**   * netlbl_conn_setattr - Label a connected socket using the correct protocol   * @sk: the socket to label   * @addr: the destination address @@ -1126,7 +1150,8 @@ int netlbl_conn_setattr(struct sock *sk,  		switch (entry->type) {  		case NETLBL_NLTYPE_CIPSOV4:  			ret_val = cipso_v4_sock_setattr(sk, -							entry->cipso, secattr); +							entry->cipso, secattr, +							netlbl_sk_lock_check(sk));  			break;  		case NETLBL_NLTYPE_UNLABELED:  			/* just delete the protocols we support for right now  |