Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1053067ybt; Wed, 1 Jul 2020 17:28:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwmQX6OWdX2siI3ELt7iA3CezjUrnExc+Uaf1FNz5pMj9bmsdVrEM5+LBmgSz5aMjULDStN X-Received: by 2002:a50:9f22:: with SMTP id b31mr32607713edf.24.1593649716860; Wed, 01 Jul 2020 17:28:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593649716; cv=none; d=google.com; s=arc-20160816; b=VtIDg5YyHaXzAhg5SPwrfokJV4YqubqeNWNlvkgHZZspX9xhmeEiZ1tuaiKB1HB3uD rEdvRboDfjkhZxWIcF64vxEYFD84u0aDBHcoq8hUiRG4w+fhD90o63znAt9vqRFwfbRU R+xPuPFYo1MSRPBxWZ8x9yrCh9H+IOuOc4bPqvO1haWrNMM14Va7+zIQMrermjKwb+jl 1MbX6RGwal6EzYxxNzMlaQW9NZ8bKqljPWHlrFYQqrGq7rDgYyTyjAqIFRX6QkU9RhTP ZHo2YHcd+yB7urWdzSlFGSv0SjyuFDzViICSmKb33extkszMQ3ncu1rmWKkplJRNYeTS V2Xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PbG3zai94Ohizr4Q4kemkoNqTWs/ORC9UHU6HKJkVfo=; b=TjfeSEWEan+5TqrZ4YRu6jiDFOnayN0An/4Pc+NtmmMeOLNOvl0xp/ew2nigL4B7mC v5gtuPs+t7QdHhOeoQ+tYr2UWFMXElRJ4NXLF7pICT8VeYZBDCYiwrnIRzO62FR9s4hb z9d58iyA+uX9XMBtwyyaOxQjhZFfgjmciWJb6SkShM0Fcgp+WPAx7Jp248pD0Tbu+9xH AN5T/WHAs3xaH65j0/4TWbuRGad2ixLbQumFVCRo0dBtGZGojWizcQxhRJiMj10n3SJ6 fmbBZ8kwoxgAyeRHhGLFkIu/QN3LVLqH3FeBsOCpoRDKjBv7m/Ad2etN82lOWUnnYY1W 24AA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@alliedtelesis.co.nz header.s=mail181024 header.b=wJqyiUuD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alliedtelesis.co.nz Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m27si4797325eja.699.2020.07.01.17.28.14; Wed, 01 Jul 2020 17:28:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@alliedtelesis.co.nz header.s=mail181024 header.b=wJqyiUuD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alliedtelesis.co.nz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728109AbgGBA15 (ORCPT + 99 others); Wed, 1 Jul 2020 20:27:57 -0400 Received: from gate2.alliedtelesis.co.nz ([202.36.163.20]:47386 "EHLO gate2.alliedtelesis.co.nz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728003AbgGBA1v (ORCPT ); Wed, 1 Jul 2020 20:27:51 -0400 Received: from mmarshal3.atlnz.lc (mmarshal3.atlnz.lc [10.32.18.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by gate2.alliedtelesis.co.nz (Postfix) with ESMTPS id 7E74A891B2; Thu, 2 Jul 2020 12:27:48 +1200 (NZST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alliedtelesis.co.nz; s=mail181024; t=1593649668; bh=PbG3zai94Ohizr4Q4kemkoNqTWs/ORC9UHU6HKJkVfo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wJqyiUuDNPsQ4b1Lqz1FZRIO0RzVYJXvS2qsiv5ZD+TNSSrZZVrJVdpKMsNah4ioV rEqhAdj1fCP1rPV9JjdYUtkY9b6jBLmHQnWbcqq6JqBqGG2y/IkjUwHj5EJchos1cO 4zbSCUqm9FiYKBzCruHi9R0oV56L4IChRf2Kel8CXImN8JTs6a6XBEoyIUoDMf/Bit jfJo2QcGF3aLhU9ErMpOy4RIsWmsiQKJYqPJwgoVhx+GSJAnG5KBJ2P17VINj9L/LM K4UeGWX1nGeD724G7A5aGrCTDiIpyKsBBXBXvtygqQWggW8rLSwexDbVstlWLtXtY3 dRLAFvG1AV3NA== Received: from smtp (Not Verified[10.32.16.33]) by mmarshal3.atlnz.lc with Trustwave SEG (v7,5,8,10121) id ; Thu, 02 Jul 2020 12:27:47 +1200 Received: from mattb-dl.ws.atlnz.lc (mattb-dl.ws.atlnz.lc [10.33.25.34]) by smtp (Postfix) with ESMTP id 4419B13EDDC; Thu, 2 Jul 2020 12:27:46 +1200 (NZST) Received: by mattb-dl.ws.atlnz.lc (Postfix, from userid 1672) id C1D7D4A02A3; Thu, 2 Jul 2020 12:27:47 +1200 (NZST) From: Matt Bennett To: netdev@vger.kernel.org Cc: zbr@ioremap.net, ebiederm@xmission.com, linux-kernel@vger.kernel.org, Matt Bennett Subject: [PATCH 4/5] connector: Prepare for supporting multiple namespaces Date: Thu, 2 Jul 2020 12:26:34 +1200 Message-Id: <20200702002635.8169-5-matt.bennett@alliedtelesis.co.nz> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200702002635.8169-1-matt.bennett@alliedtelesis.co.nz> References: <20200702002635.8169-1-matt.bennett@alliedtelesis.co.nz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable x-atlnz-ls: pat Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Extend the existing function definitions / call sites to start passing the network namespace. For now we still only pass the default namespace. Signed-off-by: Matt Bennett --- Documentation/driver-api/connector.rst | 6 +++--- drivers/connector/cn_proc.c | 5 +++-- drivers/connector/cn_queue.c | 5 +++-- drivers/connector/connector.c | 21 ++++++++++++--------- drivers/hv/hv_utils_transport.c | 6 ++++-- drivers/md/dm-log-userspace-transfer.c | 6 ++++-- drivers/video/fbdev/uvesafb.c | 8 +++++--- drivers/w1/w1_netlink.c | 19 +++++++++++-------- include/linux/connector.h | 24 ++++++++++++++++-------- samples/connector/cn_test.c | 6 ++++-- 10 files changed, 65 insertions(+), 41 deletions(-) diff --git a/Documentation/driver-api/connector.rst b/Documentation/drive= r-api/connector.rst index c100c7482289..4fb1f73d76ad 100644 --- a/Documentation/driver-api/connector.rst +++ b/Documentation/driver-api/connector.rst @@ -25,9 +25,9 @@ handling, etc... The Connector driver allows any kerne= lspace agents to use netlink based networking for inter-process communication in a significan= tly easier way:: =20 - int cn_add_callback(struct cb_id *id, char *name, void (*callback) (st= ruct cn_msg *, struct netlink_skb_parms *)); - void cn_netlink_send_multi(struct cn_msg *msg, u16 len, u32 portid, u3= 2 __group, int gfp_mask); - void cn_netlink_send(struct cn_msg *msg, u32 portid, u32 __group, int = gfp_mask); + int cn_add_callback(struct cb_id *id, char *name, void (*callback) (st= ruct net *, struct cn_msg *, struct netlink_skb_parms *)); + void cn_netlink_send_multi(struct net *net, struct cn_msg *msg, u16 le= n, u32 portid, u32 __group, int gfp_mask); + void cn_netlink_send(struct net *net, struct cn_msg *msg, u32 portid, = u32 __group, int gfp_mask); =20 struct cb_id { diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c index d90aea555a21..9202be177a30 100644 --- a/drivers/connector/cn_proc.c +++ b/drivers/connector/cn_proc.c @@ -16,6 +16,7 @@ #include #include #include +#include =20 #include #include @@ -61,7 +62,7 @@ static inline void send_msg(struct cn_msg *msg) * * If cn_netlink_send() fails, the data is not sent. */ - cn_netlink_send(msg, 0, CN_IDX_PROC, GFP_NOWAIT); + cn_netlink_send(&init_net, msg, 0, CN_IDX_PROC, GFP_NOWAIT); =20 local_unlock(&local_event.lock); } @@ -343,7 +344,7 @@ static void cn_proc_ack(int err, int rcvd_seq, int rc= vd_ack) * cn_proc_mcast_ctl * @data: message sent from userspace via the connector */ -static void cn_proc_mcast_ctl(struct cn_msg *msg, +static void cn_proc_mcast_ctl(struct net *net, struct cn_msg *msg, struct netlink_skb_parms *nsp) { enum proc_cn_mcast_op *mc_op =3D NULL; diff --git a/drivers/connector/cn_queue.c b/drivers/connector/cn_queue.c index a82ceeb37f26..22fdd2b149af 100644 --- a/drivers/connector/cn_queue.c +++ b/drivers/connector/cn_queue.c @@ -16,11 +16,12 @@ #include #include #include +#include =20 static struct cn_callback_entry * cn_queue_alloc_callback_entry(struct cn_queue_dev *dev, const char *name= , struct cb_id *id, - void (*callback)(struct cn_msg *, + void (*callback)(struct net *, struct cn_msg *, struct netlink_skb_parms *)) { struct cn_callback_entry *cbq; @@ -58,7 +59,7 @@ int cn_cb_equal(struct cb_id *i1, struct cb_id *i2) =20 int cn_queue_add_callback(struct cn_queue_dev *dev, const char *name, struct cb_id *id, - void (*callback)(struct cn_msg *, + void (*callback)(struct net *, struct cn_msg *, struct netlink_skb_parms *)) { struct cn_callback_entry *cbq, *__cbq; diff --git a/drivers/connector/connector.c b/drivers/connector/connector.= c index 2d22d6bf52f2..82fcaa4d8be3 100644 --- a/drivers/connector/connector.c +++ b/drivers/connector/connector.c @@ -58,8 +58,8 @@ static int cn_already_initialized; * The message is sent to, the portid if given, the group if given, both= if * both, or if both are zero then the group is looked up and sent there. */ -int cn_netlink_send_mult(struct cn_msg *msg, u16 len, u32 portid, u32 __= group, - gfp_t gfp_mask) +int cn_netlink_send_mult(struct net *net, struct cn_msg *msg, u16 len, + u32 portid, u32 __group, gfp_t gfp_mask) { struct cn_callback_entry *__cbq; unsigned int size; @@ -118,17 +118,18 @@ int cn_netlink_send_mult(struct cn_msg *msg, u16 le= n, u32 portid, u32 __group, EXPORT_SYMBOL_GPL(cn_netlink_send_mult); =20 /* same as cn_netlink_send_mult except msg->len is used for len */ -int cn_netlink_send(struct cn_msg *msg, u32 portid, u32 __group, - gfp_t gfp_mask) +int cn_netlink_send(struct net *net, struct cn_msg *msg, u32 portid, + u32 __group, gfp_t gfp_mask) { - return cn_netlink_send_mult(msg, msg->len, portid, __group, gfp_mask); + return cn_netlink_send_mult(net, msg, msg->len, portid, __group, + gfp_mask); } EXPORT_SYMBOL_GPL(cn_netlink_send); =20 /* * Callback helper - queues work and setup destructor for given data. */ -static int cn_call_callback(struct sk_buff *skb) +static int cn_call_callback(struct net *net, struct sk_buff *skb) { struct nlmsghdr *nlh; struct cn_callback_entry *i, *cbq =3D NULL; @@ -153,7 +154,7 @@ static int cn_call_callback(struct sk_buff *skb) spin_unlock_bh(&dev->cbdev->queue_lock); =20 if (cbq !=3D NULL) { - cbq->callback(msg, nsp); + cbq->callback(net, msg, nsp); kfree_skb(skb); cn_queue_release_callback(cbq); err =3D 0; @@ -172,6 +173,8 @@ static void cn_rx_skb(struct sk_buff *skb) struct nlmsghdr *nlh; int len, err; =20 + struct net *net =3D sock_net(skb->sk); + if (skb->len >=3D NLMSG_HDRLEN) { nlh =3D nlmsg_hdr(skb); len =3D nlmsg_len(nlh); @@ -181,7 +184,7 @@ static void cn_rx_skb(struct sk_buff *skb) len > CONNECTOR_MAX_MSG_SIZE) return; =20 - err =3D cn_call_callback(skb_get(skb)); + err =3D cn_call_callback(net, skb_get(skb)); if (err < 0) kfree_skb(skb); } @@ -194,7 +197,7 @@ static void cn_rx_skb(struct sk_buff *skb) * May sleep. */ int cn_add_callback(struct cb_id *id, const char *name, - void (*callback)(struct cn_msg *, + void (*callback)(struct net *, struct cn_msg *, struct netlink_skb_parms *)) { int err; diff --git a/drivers/hv/hv_utils_transport.c b/drivers/hv/hv_utils_transp= ort.c index eb2833d2b5d0..1a67efe59e91 100644 --- a/drivers/hv/hv_utils_transport.c +++ b/drivers/hv/hv_utils_transport.c @@ -8,6 +8,7 @@ #include #include #include +#include =20 #include "hyperv_vmbus.h" #include "hv_utils_transport.h" @@ -181,7 +182,8 @@ static int hvt_op_release(struct inode *inode, struct= file *file) return 0; } =20 -static void hvt_cn_callback(struct cn_msg *msg, struct netlink_skb_parms= *nsp) +static void hvt_cn_callback(struct net *net, struct cn_msg *msg, + struct netlink_skb_parms *nsp) { struct hvutil_transport *hvt, *hvt_found =3D NULL; =20 @@ -231,7 +233,7 @@ int hvutil_transport_send(struct hvutil_transport *hv= t, void *msg, int len, cn_msg->id.val =3D hvt->cn_id.val; cn_msg->len =3D len; memcpy(cn_msg->data, msg, len); - ret =3D cn_netlink_send(cn_msg, 0, 0, GFP_ATOMIC); + ret =3D cn_netlink_send(&init_net, cn_msg, 0, 0, GFP_ATOMIC); kfree(cn_msg); /* * We don't know when netlink messages are delivered but unlike diff --git a/drivers/md/dm-log-userspace-transfer.c b/drivers/md/dm-log-u= serspace-transfer.c index fdf8ec304f8d..0e835acf14da 100644 --- a/drivers/md/dm-log-userspace-transfer.c +++ b/drivers/md/dm-log-userspace-transfer.c @@ -12,6 +12,7 @@ #include #include #include +#include =20 #include "dm-log-userspace-transfer.h" =20 @@ -66,7 +67,7 @@ static int dm_ulog_sendto_server(struct dm_ulog_request= *tfr) msg->seq =3D tfr->seq; msg->len =3D sizeof(struct dm_ulog_request) + tfr->data_size; =20 - r =3D cn_netlink_send(msg, 0, 0, gfp_any()); + r =3D cn_netlink_send(&init_net, msg, 0, 0, gfp_any()); =20 return r; } @@ -130,7 +131,8 @@ static int fill_pkg(struct cn_msg *msg, struct dm_ulo= g_request *tfr) * This is the connector callback that delivers data * that was sent from userspace. */ -static void cn_ulog_callback(struct cn_msg *msg, struct netlink_skb_parm= s *nsp) +static void cn_ulog_callback(struct net *net, struct cn_msg *msg, + struct netlink_skb_parms *nsp) { struct dm_ulog_request *tfr =3D (struct dm_ulog_request *)(msg + 1); =20 diff --git a/drivers/video/fbdev/uvesafb.c b/drivers/video/fbdev/uvesafb.= c index def14ac0ebe1..f9b6ed7b97f2 100644 --- a/drivers/video/fbdev/uvesafb.c +++ b/drivers/video/fbdev/uvesafb.c @@ -25,6 +25,7 @@ #include #include