Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 314932
b: refs/heads/master
c: a31f2d1
h: refs/heads/master
v: v3
  • Loading branch information
Pablo Neira Ayuso authored and David S. Miller committed Jun 29, 2012
1 parent d7dd4db commit ad18486
Show file tree
Hide file tree
Showing 21 changed files with 118 additions and 52 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dd7f36ba3ce17d4fe85987d83efd5901b0935816
refs/heads/master: a31f2d17b331db970259e875b7223d3aba7e3821
7 changes: 5 additions & 2 deletions trunk/crypto/crypto_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -496,9 +496,12 @@ static void crypto_netlink_rcv(struct sk_buff *skb)

static int __init crypto_user_init(void)
{
struct netlink_kernel_cfg cfg = {
.input = crypto_netlink_rcv,
};

crypto_nlsk = netlink_kernel_create(&init_net, NETLINK_CRYPTO,
0, crypto_netlink_rcv,
NULL, THIS_MODULE);
THIS_MODULE, &cfg);
if (!crypto_nlsk)
return -ENOMEM;

Expand Down
13 changes: 9 additions & 4 deletions trunk/drivers/connector/connector.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,15 +251,20 @@ static const struct file_operations cn_file_ops = {
.release = single_release
};

static struct cn_dev cdev = {
.input = cn_rx_skb,
};

static int __devinit cn_init(void)
{
struct cn_dev *dev = &cdev;

dev->input = cn_rx_skb;
struct netlink_kernel_cfg cfg = {
.groups = CN_NETLINK_USERS + 0xf,
.input = dev->input,
};

dev->nls = netlink_kernel_create(&init_net, NETLINK_CONNECTOR,
CN_NETLINK_USERS + 0xf,
dev->input, NULL, THIS_MODULE);
THIS_MODULE, &cfg);
if (!dev->nls)
return -EIO;

Expand Down
7 changes: 5 additions & 2 deletions trunk/drivers/infiniband/core/netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,11 @@ static void ibnl_rcv(struct sk_buff *skb)

int __init ibnl_init(void)
{
nls = netlink_kernel_create(&init_net, NETLINK_RDMA, 0, ibnl_rcv,
NULL, THIS_MODULE);
struct netlink_kernel_cfg cfg = {
.input = ibnl_rcv,
};

nls = netlink_kernel_create(&init_net, NETLINK_RDMA, THIS_MODULE, &cfg);
if (!nls) {
pr_warn("Failed to create netlink socket\n");
return -ENOMEM;
Expand Down
7 changes: 5 additions & 2 deletions trunk/drivers/scsi/scsi_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,10 @@ void
scsi_netlink_init(void)
{
int error;
struct netlink_kernel_cfg cfg = {
.input = scsi_nl_rcv_msg,
.groups = SCSI_NL_GRP_CNT,
};

INIT_LIST_HEAD(&scsi_nl_drivers);

Expand All @@ -497,8 +501,7 @@ scsi_netlink_init(void)
}

scsi_nl_sock = netlink_kernel_create(&init_net, NETLINK_SCSITRANSPORT,
SCSI_NL_GRP_CNT, scsi_nl_rcv_msg, NULL,
THIS_MODULE);
THIS_MODULE, &cfg);
if (!scsi_nl_sock) {
printk(KERN_ERR "%s: register of receive handler failed\n",
__func__);
Expand Down
9 changes: 6 additions & 3 deletions trunk/drivers/scsi/scsi_transport_iscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -2936,7 +2936,10 @@ EXPORT_SYMBOL_GPL(iscsi_unregister_transport);
static __init int iscsi_transport_init(void)
{
int err;

struct netlink_kernel_cfg cfg = {
.groups = 1,
.input = iscsi_if_rx,
};
printk(KERN_INFO "Loading iSCSI transport class v%s.\n",
ISCSI_TRANSPORT_VERSION);

Expand Down Expand Up @@ -2966,8 +2969,8 @@ static __init int iscsi_transport_init(void)
if (err)
goto unregister_conn_class;

nls = netlink_kernel_create(&init_net, NETLINK_ISCSI, 1, iscsi_if_rx,
NULL, THIS_MODULE);
nls = netlink_kernel_create(&init_net, NETLINK_ISCSI,
THIS_MODULE, &cfg);
if (!nls) {
err = -ENOBUFS;
goto unregister_session_class;
Expand Down
6 changes: 4 additions & 2 deletions trunk/drivers/staging/gdm72xx/netlink_k.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,15 @@ struct sock *netlink_init(int unit, void (*cb)(struct net_device *dev, u16 type,
void *msg, int len))
{
struct sock *sock;
struct netlink_kernel_cfg cfg = {
.input = netlink_rcv,
};

#if !defined(DEFINE_MUTEX)
init_MUTEX(&netlink_mutex);
#endif

sock = netlink_kernel_create(&init_net, unit, 0, netlink_rcv, NULL,
THIS_MODULE);
sock = netlink_kernel_create(&init_net, unit, THIS_MODULE, &cfg);

if (sock)
rcv_cb = cb;
Expand Down
15 changes: 10 additions & 5 deletions trunk/include/linux/netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,11 +174,16 @@ struct netlink_skb_parms {
extern void netlink_table_grab(void);
extern void netlink_table_ungrab(void);

extern struct sock *netlink_kernel_create(struct net *net,
int unit,unsigned int groups,
void (*input)(struct sk_buff *skb),
struct mutex *cb_mutex,
struct module *module);
/* optional Netlink kernel configuration parameters */
struct netlink_kernel_cfg {
unsigned int groups;
void (*input)(struct sk_buff *skb);
struct mutex *cb_mutex;
};

extern struct sock *netlink_kernel_create(struct net *net, int unit,
struct module *module,
struct netlink_kernel_cfg *cfg);
extern void netlink_kernel_release(struct sock *sk);
extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups);
extern int netlink_change_ngroups(struct sock *sk, unsigned int groups);
Expand Down
7 changes: 5 additions & 2 deletions trunk/kernel/audit.c
Original file line number Diff line number Diff line change
Expand Up @@ -962,14 +962,17 @@ static void audit_receive(struct sk_buff *skb)
static int __init audit_init(void)
{
int i;
struct netlink_kernel_cfg cfg = {
.input = audit_receive,
};

if (audit_initialized == AUDIT_DISABLED)
return 0;

printk(KERN_INFO "audit: initializing netlink socket (%s)\n",
audit_default ? "enabled" : "disabled");
audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0,
audit_receive, NULL, THIS_MODULE);
audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT,
THIS_MODULE, &cfg);
if (!audit_sock)
audit_panic("cannot initialize netlink socket");
else
Expand Down
5 changes: 4 additions & 1 deletion trunk/lib/kobject_uevent.c
Original file line number Diff line number Diff line change
Expand Up @@ -373,13 +373,16 @@ EXPORT_SYMBOL_GPL(add_uevent_var);
static int uevent_net_init(struct net *net)
{
struct uevent_sock *ue_sk;
struct netlink_kernel_cfg cfg = {
.groups = 1,
};

ue_sk = kzalloc(sizeof(*ue_sk), GFP_KERNEL);
if (!ue_sk)
return -ENOMEM;

ue_sk->sk = netlink_kernel_create(net, NETLINK_KOBJECT_UEVENT,
1, NULL, NULL, THIS_MODULE);
THIS_MODULE, &cfg);
if (!ue_sk->sk) {
printk(KERN_ERR
"kobject_uevent: unable to create netlink socket!\n");
Expand Down
6 changes: 4 additions & 2 deletions trunk/net/bridge/netfilter/ebt_ulog.c
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,9 @@ static int __init ebt_ulog_init(void)
{
int ret;
int i;
struct netlink_kernel_cfg cfg = {
.groups = EBT_ULOG_MAXNLGROUPS,
};

if (nlbufsiz >= 128*1024) {
pr_warning("Netlink buffer has to be <= 128kB,"
Expand All @@ -296,8 +299,7 @@ static int __init ebt_ulog_init(void)
}

ebtulognl = netlink_kernel_create(&init_net, NETLINK_NFLOG,
EBT_ULOG_MAXNLGROUPS, NULL, NULL,
THIS_MODULE);
THIS_MODULE, &cfg);
if (!ebtulognl)
ret = -ENOMEM;
else if ((ret = xt_register_target(&ebt_ulog_tg_reg)) != 0)
Expand Down
9 changes: 7 additions & 2 deletions trunk/net/core/rtnetlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -2353,8 +2353,13 @@ static struct notifier_block rtnetlink_dev_notifier = {
static int __net_init rtnetlink_net_init(struct net *net)
{
struct sock *sk;
sk = netlink_kernel_create(net, NETLINK_ROUTE, RTNLGRP_MAX,
rtnetlink_rcv, &rtnl_mutex, THIS_MODULE);
struct netlink_kernel_cfg cfg = {
.groups = RTNLGRP_MAX,
.input = rtnetlink_rcv,
.cb_mutex = &rtnl_mutex,
};

sk = netlink_kernel_create(net, NETLINK_ROUTE, THIS_MODULE, &cfg);
if (!sk)
return -ENOMEM;
net->rtnl = sk;
Expand Down
8 changes: 6 additions & 2 deletions trunk/net/core/sock_diag.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,12 @@ EXPORT_SYMBOL_GPL(sock_diag_nlsk);

static int __init sock_diag_init(void)
{
sock_diag_nlsk = netlink_kernel_create(&init_net, NETLINK_SOCK_DIAG, 0,
sock_diag_rcv, NULL, THIS_MODULE);
struct netlink_kernel_cfg cfg = {
.input = sock_diag_rcv,
};

sock_diag_nlsk = netlink_kernel_create(&init_net, NETLINK_SOCK_DIAG,
THIS_MODULE, &cfg);
return sock_diag_nlsk == NULL ? -ENOMEM : 0;
}

Expand Down
8 changes: 5 additions & 3 deletions trunk/net/decnet/netfilter/dn_rtmsg.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,11 +125,13 @@ static struct nf_hook_ops dnrmg_ops __read_mostly = {
static int __init dn_rtmsg_init(void)
{
int rv = 0;
struct netlink_kernel_cfg cfg = {
.groups = DNRNG_NLGRP_MAX,
.input = dnrmg_receive_user_skb,
};

dnrmg = netlink_kernel_create(&init_net,
NETLINK_DNRTMSG, DNRNG_NLGRP_MAX,
dnrmg_receive_user_skb,
NULL, THIS_MODULE);
NETLINK_DNRTMSG, THIS_MODULE, &cfg);
if (dnrmg == NULL) {
printk(KERN_ERR "dn_rtmsg: Cannot create netlink socket");
return -ENOMEM;
Expand Down
7 changes: 5 additions & 2 deletions trunk/net/ipv4/fib_frontend.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,8 +976,11 @@ static void nl_fib_input(struct sk_buff *skb)
static int __net_init nl_fib_lookup_init(struct net *net)
{
struct sock *sk;
sk = netlink_kernel_create(net, NETLINK_FIB_LOOKUP, 0,
nl_fib_input, NULL, THIS_MODULE);
struct netlink_kernel_cfg cfg = {
.input = nl_fib_input,
};

sk = netlink_kernel_create(net, NETLINK_FIB_LOOKUP, THIS_MODULE, &cfg);
if (sk == NULL)
return -EAFNOSUPPORT;
net->ipv4.fibnl = sk;
Expand Down
8 changes: 5 additions & 3 deletions trunk/net/ipv4/netfilter/ipt_ULOG.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,9 @@ static struct nf_logger ipt_ulog_logger __read_mostly = {
static int __init ulog_tg_init(void)
{
int ret, i;
struct netlink_kernel_cfg cfg = {
.groups = ULOG_MAXNLGROUPS,
};

pr_debug("init module\n");

Expand All @@ -393,9 +396,8 @@ static int __init ulog_tg_init(void)
for (i = 0; i < ULOG_MAXNLGROUPS; i++)
setup_timer(&ulog_buffers[i].timer, ulog_timer, i);

nflognl = netlink_kernel_create(&init_net,
NETLINK_NFLOG, ULOG_MAXNLGROUPS, NULL,
NULL, THIS_MODULE);
nflognl = netlink_kernel_create(&init_net, NETLINK_NFLOG,
THIS_MODULE, &cfg);
if (!nflognl)
return -ENOMEM;

Expand Down
7 changes: 5 additions & 2 deletions trunk/net/netfilter/nfnetlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,12 @@ static void nfnetlink_rcv(struct sk_buff *skb)
static int __net_init nfnetlink_net_init(struct net *net)
{
struct sock *nfnl;
struct netlink_kernel_cfg cfg = {
.groups = NFNLGRP_MAX,
.input = nfnetlink_rcv,
};

nfnl = netlink_kernel_create(net, NETLINK_NETFILTER, NFNLGRP_MAX,
nfnetlink_rcv, NULL, THIS_MODULE);
nfnl = netlink_kernel_create(net, NETLINK_NETFILTER, THIS_MODULE, &cfg);
if (!nfnl)
return -ENOMEM;
net->nfnl_stash = nfnl;
Expand Down
16 changes: 10 additions & 6 deletions trunk/net/netlink/af_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1503,14 +1503,16 @@ static void netlink_data_ready(struct sock *sk, int len)
*/

struct sock *
netlink_kernel_create(struct net *net, int unit, unsigned int groups,
void (*input)(struct sk_buff *skb),
struct mutex *cb_mutex, struct module *module)
netlink_kernel_create(struct net *net, int unit,
struct module *module,
struct netlink_kernel_cfg *cfg)
{
struct socket *sock;
struct sock *sk;
struct netlink_sock *nlk;
struct listeners *listeners = NULL;
struct mutex *cb_mutex = cfg ? cfg->cb_mutex : NULL;
unsigned int groups;

BUG_ON(!nl_table);

Expand All @@ -1532,16 +1534,18 @@ netlink_kernel_create(struct net *net, int unit, unsigned int groups,
sk = sock->sk;
sk_change_net(sk, net);

if (groups < 32)
if (!cfg || cfg->groups < 32)
groups = 32;
else
groups = cfg->groups;

listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
if (!listeners)
goto out_sock_release;

sk->sk_data_ready = netlink_data_ready;
if (input)
nlk_sk(sk)->netlink_rcv = input;
if (cfg && cfg->input)
nlk_sk(sk)->netlink_rcv = cfg->input;

if (netlink_insert(sk, net, 0))
goto out_sock_release;
Expand Down
10 changes: 7 additions & 3 deletions trunk/net/netlink/genetlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -915,10 +915,14 @@ static struct genl_multicast_group notify_grp = {

static int __net_init genl_pernet_init(struct net *net)
{
struct netlink_kernel_cfg cfg = {
.input = genl_rcv,
.cb_mutex = &genl_mutex,
};

/* we'll bump the group number right afterwards */
net->genl_sock = netlink_kernel_create(net, NETLINK_GENERIC, 0,
genl_rcv, &genl_mutex,
THIS_MODULE);
net->genl_sock = netlink_kernel_create(net, NETLINK_GENERIC,
THIS_MODULE, &cfg);

if (!net->genl_sock && net_eq(net, &init_net))
panic("GENL: Cannot initialize generic netlink\n");
Expand Down
7 changes: 5 additions & 2 deletions trunk/net/xfrm/xfrm_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -2959,9 +2959,12 @@ static struct xfrm_mgr netlink_mgr = {
static int __net_init xfrm_user_net_init(struct net *net)
{
struct sock *nlsk;
struct netlink_kernel_cfg cfg = {
.groups = XFRMNLGRP_MAX,
.input = xfrm_netlink_rcv,
};

nlsk = netlink_kernel_create(net, NETLINK_XFRM, XFRMNLGRP_MAX,
xfrm_netlink_rcv, NULL, THIS_MODULE);
nlsk = netlink_kernel_create(net, NETLINK_XFRM, THIS_MODULE, &cfg);
if (nlsk == NULL)
return -ENOMEM;
net->xfrm.nlsk_stash = nlsk; /* Don't set to NULL */
Expand Down
6 changes: 5 additions & 1 deletion trunk/security/selinux/netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,12 @@ void selnl_notify_policyload(u32 seqno)

static int __init selnl_init(void)
{
struct netlink_kernel_cfg cfg = {
.groups = SELNLGRP_MAX,
};

selnl = netlink_kernel_create(&init_net, NETLINK_SELINUX,
SELNLGRP_MAX, NULL, NULL, THIS_MODULE);
THIS_MODULE, &cfg);
if (selnl == NULL)
panic("SELinux: Cannot create netlink socket.");
netlink_set_nonroot(NETLINK_SELINUX, NL_NONROOT_RECV);
Expand Down

0 comments on commit ad18486

Please sign in to comment.