162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * SELinux interface to the NetLabel subsystem
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Author: Paul Moore <paul@paul-moore.com>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/*
962306a36Sopenharmony_ci * (c) Copyright Hewlett-Packard Development Company, L.P., 2006
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#ifndef _SELINUX_NETLABEL_H_
1362306a36Sopenharmony_ci#define _SELINUX_NETLABEL_H_
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include <linux/types.h>
1662306a36Sopenharmony_ci#include <linux/fs.h>
1762306a36Sopenharmony_ci#include <linux/net.h>
1862306a36Sopenharmony_ci#include <linux/skbuff.h>
1962306a36Sopenharmony_ci#include <net/sock.h>
2062306a36Sopenharmony_ci#include <net/request_sock.h>
2162306a36Sopenharmony_ci#include <net/sctp/structs.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#include "avc.h"
2462306a36Sopenharmony_ci#include "objsec.h"
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#ifdef CONFIG_NETLABEL
2762306a36Sopenharmony_civoid selinux_netlbl_cache_invalidate(void);
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_civoid selinux_netlbl_err(struct sk_buff *skb, u16 family, int error,
3062306a36Sopenharmony_ci			int gateway);
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_civoid selinux_netlbl_sk_security_free(struct sk_security_struct *sksec);
3362306a36Sopenharmony_civoid selinux_netlbl_sk_security_reset(struct sk_security_struct *sksec);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciint selinux_netlbl_skbuff_getsid(struct sk_buff *skb,
3662306a36Sopenharmony_ci				 u16 family,
3762306a36Sopenharmony_ci				 u32 *type,
3862306a36Sopenharmony_ci				 u32 *sid);
3962306a36Sopenharmony_ciint selinux_netlbl_skbuff_setsid(struct sk_buff *skb,
4062306a36Sopenharmony_ci				 u16 family,
4162306a36Sopenharmony_ci				 u32 sid);
4262306a36Sopenharmony_ciint selinux_netlbl_sctp_assoc_request(struct sctp_association *asoc,
4362306a36Sopenharmony_ci				     struct sk_buff *skb);
4462306a36Sopenharmony_ciint selinux_netlbl_inet_conn_request(struct request_sock *req, u16 family);
4562306a36Sopenharmony_civoid selinux_netlbl_inet_csk_clone(struct sock *sk, u16 family);
4662306a36Sopenharmony_civoid selinux_netlbl_sctp_sk_clone(struct sock *sk, struct sock *newsk);
4762306a36Sopenharmony_ciint selinux_netlbl_socket_post_create(struct sock *sk, u16 family);
4862306a36Sopenharmony_ciint selinux_netlbl_sock_rcv_skb(struct sk_security_struct *sksec,
4962306a36Sopenharmony_ci				struct sk_buff *skb,
5062306a36Sopenharmony_ci				u16 family,
5162306a36Sopenharmony_ci				struct common_audit_data *ad);
5262306a36Sopenharmony_ciint selinux_netlbl_socket_setsockopt(struct socket *sock,
5362306a36Sopenharmony_ci				     int level,
5462306a36Sopenharmony_ci				     int optname);
5562306a36Sopenharmony_ciint selinux_netlbl_socket_connect(struct sock *sk, struct sockaddr *addr);
5662306a36Sopenharmony_ciint selinux_netlbl_socket_connect_locked(struct sock *sk,
5762306a36Sopenharmony_ci					 struct sockaddr *addr);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#else
6062306a36Sopenharmony_cistatic inline void selinux_netlbl_cache_invalidate(void)
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci	return;
6362306a36Sopenharmony_ci}
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cistatic inline void selinux_netlbl_err(struct sk_buff *skb,
6662306a36Sopenharmony_ci				      u16 family,
6762306a36Sopenharmony_ci				      int error,
6862306a36Sopenharmony_ci				      int gateway)
6962306a36Sopenharmony_ci{
7062306a36Sopenharmony_ci	return;
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistatic inline void selinux_netlbl_sk_security_free(
7462306a36Sopenharmony_ci					       struct sk_security_struct *sksec)
7562306a36Sopenharmony_ci{
7662306a36Sopenharmony_ci	return;
7762306a36Sopenharmony_ci}
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistatic inline void selinux_netlbl_sk_security_reset(
8062306a36Sopenharmony_ci					       struct sk_security_struct *sksec)
8162306a36Sopenharmony_ci{
8262306a36Sopenharmony_ci	return;
8362306a36Sopenharmony_ci}
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_cistatic inline int selinux_netlbl_skbuff_getsid(struct sk_buff *skb,
8662306a36Sopenharmony_ci					       u16 family,
8762306a36Sopenharmony_ci					       u32 *type,
8862306a36Sopenharmony_ci					       u32 *sid)
8962306a36Sopenharmony_ci{
9062306a36Sopenharmony_ci	*type = NETLBL_NLTYPE_NONE;
9162306a36Sopenharmony_ci	*sid = SECSID_NULL;
9262306a36Sopenharmony_ci	return 0;
9362306a36Sopenharmony_ci}
9462306a36Sopenharmony_cistatic inline int selinux_netlbl_skbuff_setsid(struct sk_buff *skb,
9562306a36Sopenharmony_ci					       u16 family,
9662306a36Sopenharmony_ci					       u32 sid)
9762306a36Sopenharmony_ci{
9862306a36Sopenharmony_ci	return 0;
9962306a36Sopenharmony_ci}
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_cistatic inline int selinux_netlbl_sctp_assoc_request(struct sctp_association *asoc,
10262306a36Sopenharmony_ci						    struct sk_buff *skb)
10362306a36Sopenharmony_ci{
10462306a36Sopenharmony_ci	return 0;
10562306a36Sopenharmony_ci}
10662306a36Sopenharmony_cistatic inline int selinux_netlbl_inet_conn_request(struct request_sock *req,
10762306a36Sopenharmony_ci						   u16 family)
10862306a36Sopenharmony_ci{
10962306a36Sopenharmony_ci	return 0;
11062306a36Sopenharmony_ci}
11162306a36Sopenharmony_cistatic inline void selinux_netlbl_inet_csk_clone(struct sock *sk, u16 family)
11262306a36Sopenharmony_ci{
11362306a36Sopenharmony_ci	return;
11462306a36Sopenharmony_ci}
11562306a36Sopenharmony_cistatic inline void selinux_netlbl_sctp_sk_clone(struct sock *sk,
11662306a36Sopenharmony_ci						struct sock *newsk)
11762306a36Sopenharmony_ci{
11862306a36Sopenharmony_ci	return;
11962306a36Sopenharmony_ci}
12062306a36Sopenharmony_cistatic inline int selinux_netlbl_socket_post_create(struct sock *sk,
12162306a36Sopenharmony_ci						    u16 family)
12262306a36Sopenharmony_ci{
12362306a36Sopenharmony_ci	return 0;
12462306a36Sopenharmony_ci}
12562306a36Sopenharmony_cistatic inline int selinux_netlbl_sock_rcv_skb(struct sk_security_struct *sksec,
12662306a36Sopenharmony_ci					      struct sk_buff *skb,
12762306a36Sopenharmony_ci					      u16 family,
12862306a36Sopenharmony_ci					      struct common_audit_data *ad)
12962306a36Sopenharmony_ci{
13062306a36Sopenharmony_ci	return 0;
13162306a36Sopenharmony_ci}
13262306a36Sopenharmony_cistatic inline int selinux_netlbl_socket_setsockopt(struct socket *sock,
13362306a36Sopenharmony_ci						   int level,
13462306a36Sopenharmony_ci						   int optname)
13562306a36Sopenharmony_ci{
13662306a36Sopenharmony_ci	return 0;
13762306a36Sopenharmony_ci}
13862306a36Sopenharmony_cistatic inline int selinux_netlbl_socket_connect(struct sock *sk,
13962306a36Sopenharmony_ci						struct sockaddr *addr)
14062306a36Sopenharmony_ci{
14162306a36Sopenharmony_ci	return 0;
14262306a36Sopenharmony_ci}
14362306a36Sopenharmony_cistatic inline int selinux_netlbl_socket_connect_locked(struct sock *sk,
14462306a36Sopenharmony_ci						       struct sockaddr *addr)
14562306a36Sopenharmony_ci{
14662306a36Sopenharmony_ci	return 0;
14762306a36Sopenharmony_ci}
14862306a36Sopenharmony_ci#endif /* CONFIG_NETLABEL */
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci#endif
151