get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/980258/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 980258,
    "url": "http://patchwork.ozlabs.org/api/patches/980258/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20181008031644.15989-16-dsahern@kernel.org/",
    "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": "<20181008031644.15989-16-dsahern@kernel.org>",
    "list_archive_url": null,
    "date": "2018-10-08T03:16:36",
    "name": "[v2,net-next,15/23] net/neighbor: Update neigh_dump_info for strict data checking",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "0655be74dd25cd5188c7b8f744755fe7385fc8d7",
    "submitter": {
        "id": 74101,
        "url": "http://patchwork.ozlabs.org/api/people/74101/?format=api",
        "name": "David Ahern",
        "email": "dsahern@kernel.org"
    },
    "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/20181008031644.15989-16-dsahern@kernel.org/mbox/",
    "series": [
        {
            "id": 69470,
            "url": "http://patchwork.ozlabs.org/api/series/69470/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=69470",
            "date": "2018-10-08T03:16:21",
            "name": "rtnetlink: Add support for rigid checking of data in dump request",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/69470/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/980258/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/980258/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming-netdev@ozlabs.org",
        "Delivered-To": "patchwork-incoming-netdev@ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdmarc=pass (p=none dis=none) header.from=kernel.org",
            "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=kernel.org header.i=@kernel.org\n\theader.b=\"mXZ9pm3m\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 42T5BG2yqhz9sCr\n\tfor <patchwork-incoming-netdev@ozlabs.org>;\n\tMon,  8 Oct 2018 14:16:54 +1100 (AEDT)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1727039AbeJHK0W (ORCPT\n\t<rfc822;patchwork-incoming-netdev@ozlabs.org>);\n\tMon, 8 Oct 2018 06:26:22 -0400",
            "from mail.kernel.org ([198.145.29.99]:42610 \"EHLO mail.kernel.org\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S1726969AbeJHK0V (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tMon, 8 Oct 2018 06:26:21 -0400",
            "from kenny.it.cumulusnetworks.com. (fw.cumulusnetworks.com\n\t[216.129.126.126])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby mail.kernel.org (Postfix) with ESMTPSA id E660E20841;\n\tMon,  8 Oct 2018 03:16:50 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=default; t=1538968611;\n\tbh=3WgeQyUychW33iuVCcRGhfKXKt3+LzGAUSsemoOriQw=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=mXZ9pm3mCv2/Uor/pJNIOjfH5LHoUwjsZA8gEaLOrQzwiB7lDrIiu7oThC/hMlETM\n\tCxR8d9yLkf/Pd4we7IX8vasrF6z23KLL9+ZUhrdRgWCevV0dwRvwmBdw278sHkrSeH\n\t4ndzePCn74sg7ME6LGAlbaaVAGRhUgQ/ybpvzOQc=",
        "From": "David Ahern <dsahern@kernel.org>",
        "To": "netdev@vger.kernel.org, davem@davemloft.net",
        "Cc": "christian@brauner.io, jbenc@redhat.com, stephen@networkplumber.org,\n\tDavid Ahern <dsahern@gmail.com>",
        "Subject": "[PATCH v2 net-next 15/23] net/neighbor: Update neigh_dump_info for\n\tstrict data checking",
        "Date": "Sun,  7 Oct 2018 20:16:36 -0700",
        "Message-Id": "<20181008031644.15989-16-dsahern@kernel.org>",
        "X-Mailer": "git-send-email 2.11.0",
        "In-Reply-To": "<20181008031644.15989-1-dsahern@kernel.org>",
        "References": "<20181008031644.15989-1-dsahern@kernel.org>",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: David Ahern <dsahern@gmail.com>\n\nUpdate neigh_dump_info for strict data checking. If the flag is set,\nthe dump request is expected to have an ndmsg struct as the header\npotentially followed by one or more attributes. Any data passed in the\nheader or as an attribute is taken as a request to influence the data\nreturned. Only values supported by the dump handler are allowed to be\nnon-0 or set in the request. At the moment only the NDA_IFINDEX and\nNDA_MASTER attributes are supported.\n\nExisting code does not fail the dump if nlmsg_parse fails. That behavior\nis kept for non-strict checking.\n\nSigned-off-by: David Ahern <dsahern@gmail.com>\n---\n net/core/neighbour.c | 82 ++++++++++++++++++++++++++++++++++++++++++----------\n 1 file changed, 67 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/net/core/neighbour.c b/net/core/neighbour.c\nindex b06f794bf91e..7c8a3a0ee059 100644\n--- a/net/core/neighbour.c\n+++ b/net/core/neighbour.c\n@@ -2426,11 +2426,73 @@ static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,\n \n }\n \n+static int neigh_valid_dump_req(const struct nlmsghdr *nlh,\n+\t\t\t\tbool strict_check,\n+\t\t\t\tstruct neigh_dump_filter *filter,\n+\t\t\t\tstruct netlink_ext_ack *extack)\n+{\n+\tstruct nlattr *tb[NDA_MAX + 1];\n+\tint err, i;\n+\n+\tif (strict_check) {\n+\t\tstruct ndmsg *ndm;\n+\n+\t\tif (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) {\n+\t\t\tNL_SET_ERR_MSG(extack, \"Invalid header for neighbor dump request\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\tndm = nlmsg_data(nlh);\n+\t\tif (ndm->ndm_pad1  || ndm->ndm_pad2  || ndm->ndm_ifindex ||\n+\t\t    ndm->ndm_state || ndm->ndm_flags || ndm->ndm_type) {\n+\t\t\tNL_SET_ERR_MSG(extack, \"Invalid values in header for neighbor dump request\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\terr = nlmsg_parse_strict(nlh, sizeof(struct ndmsg), tb, NDA_MAX,\n+\t\t\t\t\t NULL, extack);\n+\t} else {\n+\t\terr = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX,\n+\t\t\t\t  NULL, extack);\n+\t}\n+\tif (err < 0)\n+\t\treturn err;\n+\n+\tfor (i = 0; i <= NDA_MAX; ++i) {\n+\t\tif (!tb[i])\n+\t\t\tcontinue;\n+\n+\t\t/* all new attributes should require strict_check */\n+\t\tswitch (i) {\n+\t\tcase NDA_IFINDEX:\n+\t\t\tif (nla_len(tb[i]) != sizeof(u32)) {\n+\t\t\t\tNL_SET_ERR_MSG(extack, \"Invalid IFINDEX attribute in neighbor dump request\");\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\tfilter->dev_idx = nla_get_u32(tb[i]);\n+\t\t\tbreak;\n+\t\tcase NDA_MASTER:\n+\t\t\tif (nla_len(tb[i]) != sizeof(u32)) {\n+\t\t\t\tNL_SET_ERR_MSG(extack, \"Invalid MASTER attribute in neighbor dump request\");\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t\tfilter->master_idx = nla_get_u32(tb[i]);\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tif (strict_check) {\n+\t\t\t\tNL_SET_ERR_MSG(extack, \"Unsupported attribute in neighbor dump request\");\n+\t\t\t\treturn -EINVAL;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)\n {\n \tconst struct nlmsghdr *nlh = cb->nlh;\n \tstruct neigh_dump_filter filter = {};\n-\tstruct nlattr *tb[NDA_MAX + 1];\n \tstruct neigh_table *tbl;\n \tint t, family, s_t;\n \tint proxy = 0;\n@@ -2445,20 +2507,10 @@ static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)\n \t    ((struct ndmsg *)nlmsg_data(nlh))->ndm_flags == NTF_PROXY)\n \t\tproxy = 1;\n \n-\terr = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL,\n-\t\t\t  cb->extack);\n-\tif (!err) {\n-\t\tif (tb[NDA_IFINDEX]) {\n-\t\t\tif (nla_len(tb[NDA_IFINDEX]) != sizeof(u32))\n-\t\t\t\treturn -EINVAL;\n-\t\t\tfilter.dev_idx = nla_get_u32(tb[NDA_IFINDEX]);\n-\t\t}\n-\t\tif (tb[NDA_MASTER]) {\n-\t\t\tif (nla_len(tb[NDA_MASTER]) != sizeof(u32))\n-\t\t\t\treturn -EINVAL;\n-\t\t\tfilter.master_idx = nla_get_u32(tb[NDA_MASTER]);\n-\t\t}\n-\t}\n+\terr = neigh_valid_dump_req(nlh, cb->strict_check, &filter, cb->extack);\n+\tif (err < 0 && cb->strict_check)\n+\t\treturn err;\n+\n \ts_t = cb->args[0];\n \n \tfor (t = 0; t < NEIGH_NR_TABLES; t++) {\n",
    "prefixes": [
        "v2",
        "net-next",
        "15/23"
    ]
}