ipv6: sr: add core files for SR HMAC support
This patch adds the necessary functions to compute and check the HMAC signature of an SR-enabled packet. Two HMAC algorithms are supported: hmac(sha1) and hmac(sha256). In order to avoid dynamic memory allocation for each HMAC computation, a per-cpu ring buffer is allocated for this purpose. A new per-interface sysctl called seg6_require_hmac is added, allowing a user-defined policy for processing HMAC-signed SR-enabled packets. A value of -1 means that the HMAC field will always be ignored. A value of 0 means that if an HMAC field is present, its validity will be enforced (the packet is dropped is the signature is incorrect). Finally, a value of 1 means that any SR-enabled packet that does not contain an HMAC signature or whose signature is incorrect will be dropped. Signed-off-by: David Lebrun <david.lebrun@uclouvain.be> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
6c8702c60b
commit
bf355b8d2c
@@ -239,6 +239,9 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
|
||||
.ignore_routes_with_linkdown = 0,
|
||||
.keep_addr_on_down = 0,
|
||||
.seg6_enabled = 0,
|
||||
#ifdef CONFIG_IPV6_SEG6_HMAC
|
||||
.seg6_require_hmac = 0,
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
|
||||
@@ -286,6 +289,9 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
|
||||
.ignore_routes_with_linkdown = 0,
|
||||
.keep_addr_on_down = 0,
|
||||
.seg6_enabled = 0,
|
||||
#ifdef CONFIG_IPV6_SEG6_HMAC
|
||||
.seg6_require_hmac = 0,
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Check if a valid qdisc is available */
|
||||
@@ -4947,6 +4953,9 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
|
||||
array[DEVCONF_DROP_UNSOLICITED_NA] = cnf->drop_unsolicited_na;
|
||||
array[DEVCONF_KEEP_ADDR_ON_DOWN] = cnf->keep_addr_on_down;
|
||||
array[DEVCONF_SEG6_ENABLED] = cnf->seg6_enabled;
|
||||
#ifdef CONFIG_IPV6_SEG6_HMAC
|
||||
array[DEVCONF_SEG6_REQUIRE_HMAC] = cnf->seg6_require_hmac;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline size_t inet6_ifla6_size(void)
|
||||
@@ -6045,6 +6054,15 @@ static const struct ctl_table addrconf_sysctl[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
#ifdef CONFIG_IPV6_SEG6_HMAC
|
||||
{
|
||||
.procname = "seg6_require_hmac",
|
||||
.data = &ipv6_devconf.seg6_require_hmac,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
/* sentinel */
|
||||
}
|
||||
|
Reference in New Issue
Block a user