smack: dont compile ipv6 code unless ipv6 is configured

[ Upstream commit bfcf4004bcbce2cb674b4e8dbd31ce0891766bac ]

I want to be sure that ipv6-specific code
is not compiled in kernel binaries
if ipv6 is not configured.

[1] was getting rid of "unused variable" warning, but,
with that, it also mandated compilation of a handful ipv6-
specific functions in ipv4-only kernel configurations:

smk_ipv6_localhost, smack_ipv6host_label, smk_ipv6_check.

Their compiled bodies are likely to be removed by compiler
from the resulting binary, but, to be on the safe side,
I remove them from the compiler view.

[1]
Fixes: 00720f0e7f ("smack: avoid unused 'sip' variable warning")

Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Konstantin Andreev 2025-01-17 19:36:42 +03:00 committed by Greg Kroah-Hartman
parent c678f0831b
commit d6937b1b4a
2 changed files with 15 additions and 1 deletions

View File

@ -152,6 +152,7 @@ struct smk_net4addr {
struct smack_known *smk_label; /* label */ struct smack_known *smk_label; /* label */
}; };
#if IS_ENABLED(CONFIG_IPV6)
/* /*
* An entry in the table identifying IPv6 hosts. * An entry in the table identifying IPv6 hosts.
*/ */
@ -162,7 +163,9 @@ struct smk_net6addr {
int smk_masks; /* mask size */ int smk_masks; /* mask size */
struct smack_known *smk_label; /* label */ struct smack_known *smk_label; /* label */
}; };
#endif /* CONFIG_IPV6 */
#ifdef SMACK_IPV6_PORT_LABELING
/* /*
* An entry in the table identifying ports. * An entry in the table identifying ports.
*/ */
@ -175,6 +178,7 @@ struct smk_port_label {
short smk_sock_type; /* Socket type */ short smk_sock_type; /* Socket type */
short smk_can_reuse; short smk_can_reuse;
}; };
#endif /* SMACK_IPV6_PORT_LABELING */
struct smack_known_list_elem { struct smack_known_list_elem {
struct list_head list; struct list_head list;
@ -314,7 +318,9 @@ extern struct smack_known smack_known_web;
extern struct mutex smack_known_lock; extern struct mutex smack_known_lock;
extern struct list_head smack_known_list; extern struct list_head smack_known_list;
extern struct list_head smk_net4addr_list; extern struct list_head smk_net4addr_list;
#if IS_ENABLED(CONFIG_IPV6)
extern struct list_head smk_net6addr_list; extern struct list_head smk_net6addr_list;
#endif /* CONFIG_IPV6 */
extern struct mutex smack_onlycap_lock; extern struct mutex smack_onlycap_lock;
extern struct list_head smack_onlycap_list; extern struct list_head smack_onlycap_list;

View File

@ -2405,6 +2405,7 @@ static struct smack_known *smack_ipv4host_label(struct sockaddr_in *sip)
return NULL; return NULL;
} }
#if IS_ENABLED(CONFIG_IPV6)
/* /*
* smk_ipv6_localhost - Check for local ipv6 host address * smk_ipv6_localhost - Check for local ipv6 host address
* @sip: the address * @sip: the address
@ -2472,6 +2473,7 @@ static struct smack_known *smack_ipv6host_label(struct sockaddr_in6 *sip)
return NULL; return NULL;
} }
#endif /* CONFIG_IPV6 */
/** /**
* smack_netlbl_add - Set the secattr on a socket * smack_netlbl_add - Set the secattr on a socket
@ -2575,6 +2577,7 @@ static int smk_ipv4_check(struct sock *sk, struct sockaddr_in *sap)
return rc; return rc;
} }
#if IS_ENABLED(CONFIG_IPV6)
/** /**
* smk_ipv6_check - check Smack access * smk_ipv6_check - check Smack access
* @subject: subject Smack label * @subject: subject Smack label
@ -2607,6 +2610,7 @@ static int smk_ipv6_check(struct smack_known *subject,
rc = smk_bu_note("IPv6 check", subject, object, MAY_WRITE, rc); rc = smk_bu_note("IPv6 check", subject, object, MAY_WRITE, rc);
return rc; return rc;
} }
#endif /* CONFIG_IPV6 */
#ifdef SMACK_IPV6_PORT_LABELING #ifdef SMACK_IPV6_PORT_LABELING
/** /**
@ -2939,7 +2943,9 @@ static int smack_socket_connect(struct socket *sock, struct sockaddr *sap,
return 0; return 0;
if (addrlen < offsetofend(struct sockaddr, sa_family)) if (addrlen < offsetofend(struct sockaddr, sa_family))
return 0; return 0;
if (IS_ENABLED(CONFIG_IPV6) && sap->sa_family == AF_INET6) {
#if IS_ENABLED(CONFIG_IPV6)
if (sap->sa_family == AF_INET6) {
struct sockaddr_in6 *sip = (struct sockaddr_in6 *)sap; struct sockaddr_in6 *sip = (struct sockaddr_in6 *)sap;
struct smack_known *rsp = NULL; struct smack_known *rsp = NULL;
@ -2959,6 +2965,8 @@ static int smack_socket_connect(struct socket *sock, struct sockaddr *sap,
return rc; return rc;
} }
#endif /* CONFIG_IPV6 */
if (sap->sa_family != AF_INET || addrlen < sizeof(struct sockaddr_in)) if (sap->sa_family != AF_INET || addrlen < sizeof(struct sockaddr_in))
return 0; return 0;
rc = smk_ipv4_check(sock->sk, (struct sockaddr_in *)sap); rc = smk_ipv4_check(sock->sk, (struct sockaddr_in *)sap);