Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1273/?format=api
{ "id": 1273, "url": "http://patchwork.ozlabs.org/api/patches/1273/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/200809241430.45344.remi.denis-courmont@nokia.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<200809241430.45344.remi.denis-courmont@nokia.com>", "list_archive_url": null, "date": "2008-09-24T11:30:45", "name": "[05/11] Phonet: Netlink interface", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "1f1535fabf0edcd511692a15166be46de06635c1", "submitter": { "id": 204, "url": "http://patchwork.ozlabs.org/api/people/204/?format=api", "name": "Rémi Denis-Courmont", "email": "remi.denis-courmont@nokia.com" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/200809241430.45344.remi.denis-courmont@nokia.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/1273/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1273/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.176.167])\n\tby ozlabs.org (Postfix) with ESMTP id 636B9DDFAD\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 24 Sep 2008 21:31:11 +1000 (EST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751325AbYIXLbE (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tWed, 24 Sep 2008 07:31:04 -0400", "(majordomo@vger.kernel.org) by vger.kernel.org id S1751672AbYIXLbD\n\t(ORCPT <rfc822; netdev-outgoing>); Wed, 24 Sep 2008 07:31:03 -0400", "from smtp.nokia.com ([192.100.122.233]:41964 \"EHLO\n\tmgw-mx06.nokia.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1750988AbYIXLbB convert rfc822-to-8bit (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Wed, 24 Sep 2008 07:31:01 -0400", "from vaebh105.NOE.Nokia.com (vaebh105.europe.nokia.com\n\t[10.160.244.31])\n\tby mgw-mx06.nokia.com (Switch-3.2.6/Switch-3.2.6) with ESMTP id\n\tm8OBUXl5020455; Wed, 24 Sep 2008 14:30:55 +0300", "from esebh102.NOE.Nokia.com ([172.21.138.183]) by\n\tvaebh105.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); \n\tWed, 24 Sep 2008 14:30:49 +0300", "from vaebh101.NOE.Nokia.com ([10.160.244.22]) by\n\tesebh102.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); \n\tWed, 24 Sep 2008 14:30:49 +0300", "from esdhcp04162.research.nokia.com ([172.21.41.62]) by\n\tvaebh101.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); \n\tWed, 24 Sep 2008 14:30:49 +0300" ], "From": "\"=?iso-8859-1?q?R=E9mi?= Denis-Courmont\" \n\t<remi.denis-courmont@Nokia.com>", "Organization": "Maemo Software - Nokia Devices R&D", "To": "\"ext Thomas Graf\" <tgraf@suug.ch>", "Subject": "Re: [PATCH 05/11] Phonet: Netlink interface", "Date": "Wed, 24 Sep 2008 14:30:45 +0300", "User-Agent": "KMail/1.9.10", "References": "<200809221845.54736.remi.denis-courmont@nokia.com>\n\t<1222098445-26175-5-git-send-email-remi.denis-courmont@nokia.com>\n\t<20080923121002.GQ20815@postel.suug.ch>", "In-Reply-To": "<20080923121002.GQ20815@postel.suug.ch>", "Cc": "netdev@vger.kernel.org", "MIME-Version": "1.0", "Content-Type": "text/plain;\n charset=\"iso-8859-1\"", "Content-Transfer-Encoding": "8BIT", "Content-Disposition": "inline", "Message-Id": "<200809241430.45344.remi.denis-courmont@nokia.com>", "X-OriginalArrivalTime": "24 Sep 2008 11:30:49.0349 (UTC)\n\tFILETIME=[FE7EBB50:01C91E38]", "X-Nokia-AV": "Clean", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "Hello,\n\nOn Tuesday 23 September 2008 15:10:02, you wrote:\n> Please do not use the old attribute buffer anymore. It's use is racy\n> ever since we started dropping the rtnl semaphore in order to load\n> modules. It would be safe in this particular case but it shouldn't be\n> used for new code.\n>\n> Take a look at rtnl_setlink() for an example on how to use the interface\n> correctly. (...)\n\nOk, thanks. Would this work?", "diff": "diff --git a/net/phonet/pn_netlink.c b/net/phonet/pn_netlink.c\nindex b1ea19a..136622b 100644\n--- a/net/phonet/pn_netlink.c\n+++ b/net/phonet/pn_netlink.c\n@@ -54,11 +54,17 @@ errout:\n \t\trtnl_set_sk_err(dev_net(dev), RTNLGRP_PHONET_IFADDR, err);\n }\n \n-static int newaddr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n+static const struct nla_policy ifa_phonet_policy[IFA_MAX+1] = {\n+\t[IFA_LOCAL] = { .type = NLA_U8 },\n+};\n+\n+static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *attr,\n+\t\t\tint op)\n {\n-\tstruct rtattr **rta = attr;\n-\tstruct ifaddrmsg *ifm = NLMSG_DATA(nlm);\n+\tstruct net *net = sock_net(skb->sk);\n+\tstruct nlattr *tb[IFA_MAX+1];\n \tstruct net_device *dev;\n+\tstruct ifaddrmsg *ifm;\n \tint err;\n \tu8 pnaddr;\n \n@@ -67,53 +73,39 @@ static int newaddr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n \n \tASSERT_RTNL();\n \n-\tif (rta[IFA_LOCAL - 1] == NULL)\n+\terr = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy);\n+\tif (err < 0)\n+\t\treturn err;\n+\n+\tifm = nlmsg_data(nlh);\n+\tif (tb[IFA_LOCAL] == NULL)\n+\t\treturn -EINVAL;\n+\tpnaddr = nla_get_u8(tb[IFA_LOCAL]);\n+\tif (pnaddr & 3)\n+\t\t/* Phonet addresses only have 6 high-order bits */\n \t\treturn -EINVAL;\n \n-\tdev = __dev_get_by_index(&init_net, ifm->ifa_index);\n+\tdev = __dev_get_by_index(net, ifm->ifa_index);\n \tif (dev == NULL)\n \t\treturn -ENODEV;\n \n-\tif (ifm->ifa_prefixlen > 0)\n-\t\treturn -EINVAL;\n-\n-\tmemcpy(&pnaddr, RTA_DATA(rta[IFA_LOCAL - 1]), 1);\n-\n-\terr = phonet_address_add(dev, pnaddr);\n+\tif (op == RTM_NEWADDR)\n+\t\terr = phonet_address_add(dev, pnaddr);\n+\telse\n+\t\terr = phonet_address_del(dev, pnaddr);\n \tif (!err)\n-\t\trtmsg_notify(RTM_NEWADDR, dev, pnaddr);\n+\t\trtmsg_notify(op, dev, pnaddr);\n \treturn err;\n }\n \n-static int deladdr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n+static int newaddr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n {\n-\tstruct rtattr **rta = attr;\n-\tstruct ifaddrmsg *ifm = NLMSG_DATA(nlm);\n-\tstruct net_device *dev;\n-\tint err;\n-\tu8 pnaddr;\n-\n-\tif (!capable(CAP_SYS_ADMIN))\n-\t\treturn -EPERM;\n-\n-\tASSERT_RTNL();\n-\n-\tif (rta[IFA_LOCAL - 1] == NULL)\n-\t\treturn -EINVAL;\n-\n-\tdev = __dev_get_by_index(&init_net, ifm->ifa_index);\n-\tif (dev == NULL)\n-\t\treturn -ENODEV;\n-\n-\tif (ifm->ifa_prefixlen > 0)\n-\t\treturn -EADDRNOTAVAIL;\n-\n-\tmemcpy(&pnaddr, RTA_DATA(rta[IFA_LOCAL - 1]), 1);\n+\treturn addr_doit(skb, nlm, attr, RTM_NEWADDR);\n+}\n \n-\terr = phonet_address_del(dev, pnaddr);\n-\tif (!err)\n-\t\trtmsg_notify(RTM_DELADDR, dev, pnaddr);\n-\treturn err;\n+static int deladdr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n+{\n+\treturn addr_doit(skb, nlm, attr, RTM_DELADDR);\n }\n \n static int fill_addr(struct sk_buff *skb, struct net_device *dev, u8 addr,\n@@ -121,25 +113,23 @@ static int fill_addr(struct sk_buff *skb, struct net_device *dev, u8 addr,\n {\n \tstruct ifaddrmsg *ifm;\n \tstruct nlmsghdr *nlh;\n-\tunsigned int orig_len = skb->len;\n \n-\tnlh = NLMSG_PUT(skb, pid, seq, event, sizeof(struct ifaddrmsg));\n-\tifm = NLMSG_DATA(nlh);\n+\tnlh = nlmsg_put(skb, pid, seq, event, sizeof(*ifm), 0);\n+\tif (nlh == NULL)\n+\t\treturn -EMSGSIZE;\n+\n+\tifm = nlmsg_data(nlh);\n \tifm->ifa_family = AF_PHONET;\n \tifm->ifa_prefixlen = 0;\n \tifm->ifa_flags = IFA_F_PERMANENT;\n-\tifm->ifa_scope = RT_SCOPE_HOST;\n+\tifm->ifa_scope = RT_SCOPE_LINK;\n \tifm->ifa_index = dev->ifindex;\n-\tRTA_PUT(skb, IFA_LOCAL, 1, &addr);\n-\tnlh->nlmsg_len = skb->len - orig_len;\n-\n-\treturn 0;\n-\n-nlmsg_failure:\n-rtattr_failure:\n-\tskb_trim(skb, orig_len);\n+\tNLA_PUT_U8(skb, IFA_LOCAL, addr);\n+\treturn nlmsg_end(skb, nlh);\n \n-\treturn -1;\n+nla_put_failure:\n+\tnlmsg_cancel(skb, nlh);\n+\treturn -EMSGSIZE;\n }\n \n static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)\n", "prefixes": [ "05/11" ] }