cregit-Linux how code gets into the kernel

Release 4.10 net/netfilter/xt_CONNSECMARK.c

Directory: net/netfilter
/*
 * This module is used to copy security markings from packets
 * to connections, and restore security markings from connections
 * back to packets.  This would normally be performed in conjunction
 * with the SECMARK target and state match.
 *
 * Based somewhat on CONNMARK:
 *   Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
 *    by Henrik Nordstrom <hno@marasystems.com>
 *
 * (C) 2006,2008 Red Hat, Inc., James Morris <jmorris@redhat.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 */

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_CONNSECMARK.h>
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_ecache.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("James Morris <jmorris@redhat.com>");
MODULE_DESCRIPTION("Xtables: target for copying between connection and security mark");
MODULE_ALIAS("ipt_CONNSECMARK");
MODULE_ALIAS("ip6t_CONNSECMARK");

/*
 * If the packet has a security mark and the connection does not, copy
 * the security mark from the packet to the connection.
 */

static void secmark_save(const struct sk_buff *skb) { if (skb->secmark) { struct nf_conn *ct; enum ip_conntrack_info ctinfo; ct = nf_ct_get(skb, &ctinfo); if (ct && !ct->secmark) { ct->secmark = skb->secmark; nf_conntrack_event_cache(IPCT_SECMARK, ct); } } }

Contributors

PersonTokensPropCommitsCommitProp
james morrisjames morris4366.15%120.00%
patrick mchardypatrick mchardy1218.46%120.00%
pablo neira ayusopablo neira ayuso812.31%120.00%
jan engelhardtjan engelhardt11.54%120.00%
alexey dobriyanalexey dobriyan11.54%120.00%
Total65100.00%5100.00%

/* * If packet has no security mark, and the connection does, restore the * security mark from the connection to the packet. */
static void secmark_restore(struct sk_buff *skb) { if (!skb->secmark) { const struct nf_conn *ct; enum ip_conntrack_info ctinfo; ct = nf_ct_get(skb, &ctinfo); if (ct && ct->secmark) skb->secmark = ct->secmark; } }

Contributors

PersonTokensPropCommitsCommitProp
james morrisjames morris4376.79%133.33%
patrick mchardypatrick mchardy1221.43%133.33%
jan engelhardtjan engelhardt11.79%133.33%
Total56100.00%3100.00%


static unsigned int connsecmark_tg(struct sk_buff *skb, const struct xt_action_param *par) { const struct xt_connsecmark_target_info *info = par->targinfo; switch (info->mode) { case CONNSECMARK_SAVE: secmark_save(skb); break; case CONNSECMARK_RESTORE: secmark_restore(skb); break; default: BUG(); } return XT_CONTINUE; }

Contributors

PersonTokensPropCommitsCommitProp
james morrisjames morris5590.16%120.00%
jan engelhardtjan engelhardt58.20%360.00%
herbert xuherbert xu11.64%120.00%
Total61100.00%5100.00%


static int connsecmark_tg_check(const struct xt_tgchk_param *par) { const struct xt_connsecmark_target_info *info = par->targinfo; int ret; if (strcmp(par->table, "mangle") != 0 && strcmp(par->table, "security") != 0) { pr_info("target only valid in the \'mangle\' " "or \'security\' tables, not \'%s\'.\n", par->table); return -EINVAL; } switch (info->mode) { case CONNSECMARK_SAVE: case CONNSECMARK_RESTORE: break; default: pr_info("invalid mode: %hu\n", info->mode); return -EINVAL; } ret = nf_ct_netns_get(par->net, par->family); if (ret < 0) pr_info("cannot load conntrack support for proto=%u\n", par->family); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
jan engelhardtjan engelhardt6148.80%872.73%
james morrisjames morris5947.20%218.18%
florian westphalflorian westphal54.00%19.09%
Total125100.00%11100.00%


static void connsecmark_tg_destroy(const struct xt_tgdtor_param *par) { nf_ct_netns_put(par->net, par->family); }

Contributors

PersonTokensPropCommitsCommitProp
yasuyuki kozakaiyasuyuki kozakai1356.52%125.00%
florian westphalflorian westphal521.74%125.00%
jan engelhardtjan engelhardt521.74%250.00%
Total23100.00%4100.00%

static struct xt_target connsecmark_tg_reg __read_mostly = { .name = "CONNSECMARK", .revision = 0, .family = NFPROTO_UNSPEC, .checkentry = connsecmark_tg_check, .destroy = connsecmark_tg_destroy, .target = connsecmark_tg, .targetsize = sizeof(struct xt_connsecmark_target_info), .me = THIS_MODULE, };
static int __init connsecmark_tg_init(void) { return xt_register_target(&connsecmark_tg_reg); }

Contributors

PersonTokensPropCommitsCommitProp
james morrisjames morris1168.75%125.00%
jan engelhardtjan engelhardt425.00%250.00%
patrick mchardypatrick mchardy16.25%125.00%
Total16100.00%4100.00%


static void __exit connsecmark_tg_exit(void) { xt_unregister_target(&connsecmark_tg_reg); }

Contributors

PersonTokensPropCommitsCommitProp
james morrisjames morris1066.67%125.00%
jan engelhardtjan engelhardt426.67%250.00%
patrick mchardypatrick mchardy16.67%125.00%
Total15100.00%4100.00%

module_init(connsecmark_tg_init); module_exit(connsecmark_tg_exit);

Overall Contributors

PersonTokensPropCommitsCommitProp
james morrisjames morris30764.50%28.33%
jan engelhardtjan engelhardt9820.59%1458.33%
patrick mchardypatrick mchardy316.51%312.50%
yasuyuki kozakaiyasuyuki kozakai173.57%14.17%
pablo neira ayusopablo neira ayuso112.31%14.17%
florian westphalflorian westphal102.10%14.17%
herbert xuherbert xu10.21%14.17%
alexey dobriyanalexey dobriyan10.21%14.17%
Total476100.00%24100.00%
Directory: net/netfilter
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.