get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 807073,
    "url": "http://patchwork.ozlabs.org/api/patches/807073/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/150400962771.21371.5301539169789284670.stgit@warthog.procyon.org.uk/",
    "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": "<150400962771.21371.5301539169789284670.stgit@warthog.procyon.org.uk>",
    "list_archive_url": null,
    "date": "2017-08-29T12:27:07",
    "name": "[net-next,3/7] rxrpc: Fix IPv6 support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "994a831ae6e37916204a61fb2d3016e847a79240",
    "submitter": {
        "id": 59,
        "url": "http://patchwork.ozlabs.org/api/people/59/?format=api",
        "name": "David Howells",
        "email": "dhowells@redhat.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/150400962771.21371.5301539169789284670.stgit@warthog.procyon.org.uk/mbox/",
    "series": [
        {
            "id": 358,
            "url": "http://patchwork.ozlabs.org/api/series/358/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=358",
            "date": "2017-08-29T12:27:14",
            "name": "rxrpc: Miscellany",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/358/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/807073/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/807073/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@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>)",
            "ext-mx10.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx10.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=dhowells@redhat.com"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xhSbk1pZ3z9sNc\n\tfor <patchwork-incoming@ozlabs.org>;\n\tTue, 29 Aug 2017 22:28:34 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753887AbdH2M1M (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tTue, 29 Aug 2017 08:27:12 -0400",
            "from mx1.redhat.com ([209.132.183.28]:49904 \"EHLO mx1.redhat.com\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S1751795AbdH2M1J (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tTue, 29 Aug 2017 08:27:09 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 638CD61463;\n\tTue, 29 Aug 2017 12:27:09 +0000 (UTC)",
            "from warthog.procyon.org.uk (ovpn-120-50.rdu2.redhat.com\n\t[10.10.120.50])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 7FCD36365E;\n\tTue, 29 Aug 2017 12:27:08 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 638CD61463",
        "Organization": "Red Hat UK Ltd. Registered Address: Red Hat UK Ltd, Amberley\n\tPlace, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United\n\tKingdom.\n\tRegistered in England and Wales under Company Registration No.\n\t3798903",
        "Subject": "[PATCH net-next 3/7] rxrpc: Fix IPv6 support",
        "From": "David Howells <dhowells@redhat.com>",
        "To": "netdev@vger.kernel.org",
        "Cc": "dhowells@redhat.com, linux-afs@lists.infradead.org,\n\tlinux-kernel@vger.kernel.org",
        "Date": "Tue, 29 Aug 2017 13:27:07 +0100",
        "Message-ID": "<150400962771.21371.5301539169789284670.stgit@warthog.procyon.org.uk>",
        "In-Reply-To": "<150400960745.21371.15455867950162722742.stgit@warthog.procyon.org.uk>",
        "References": "<150400960745.21371.15455867950162722742.stgit@warthog.procyon.org.uk>",
        "User-Agent": "StGit/0.17.1-dirty",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.15",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.39]);\n\tTue, 29 Aug 2017 12:27:09 +0000 (UTC)",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "Fix IPv6 support in AF_RXRPC in the following ways:\n\n (1) When extracting the address from a received IPv4 packet, if the local\n     transport socket is open for IPv6 then fill out the sockaddr_rxrpc\n     struct for an IPv4-mapped-to-IPv6 AF_INET6 transport address instead\n     of an AF_INET one.\n\n (2) When sending CHALLENGE or RESPONSE packets, the transport length needs\n     to be set from the sockaddr_rxrpc::transport_len field rather than\n     sizeof() on the IPv4 transport address.\n\n (3) When processing an IPv4 ICMP packet received by an IPv6 socket, set up\n     the address correctly before searching for the affected peer.\n\nSigned-off-by: David Howells <dhowells@redhat.com>\n---\n\n net/rxrpc/ar-internal.h |    4 ++--\n net/rxrpc/call_accept.c |    2 +-\n net/rxrpc/conn_object.c |    2 +-\n net/rxrpc/local_event.c |    2 +-\n net/rxrpc/output.c      |    2 +-\n net/rxrpc/peer_event.c  |    6 ++++--\n net/rxrpc/rxkad.c       |    8 ++++----\n net/rxrpc/utils.c       |   23 +++++++++++++++++------\n 8 files changed, 31 insertions(+), 18 deletions(-)",
    "diff": "diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h\nindex 8cac66774de1..227e24794055 100644\n--- a/net/rxrpc/ar-internal.h\n+++ b/net/rxrpc/ar-internal.h\n@@ -830,7 +830,6 @@ void rxrpc_process_connection(struct work_struct *);\n  */\n extern unsigned int rxrpc_connection_expiry;\n \n-int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *);\n struct rxrpc_connection *rxrpc_alloc_connection(gfp_t);\n struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *,\n \t\t\t\t\t\t   struct sk_buff *);\n@@ -1060,7 +1059,8 @@ static inline void rxrpc_sysctl_exit(void) {}\n /*\n  * utils.c\n  */\n-int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *);\n+int rxrpc_extract_addr_from_skb(struct rxrpc_local *, struct sockaddr_rxrpc *,\n+\t\t\t\tstruct sk_buff *);\n \n static inline bool before(u32 seq1, u32 seq2)\n {\ndiff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c\nindex ec3383f97d4c..cbd1701e813a 100644\n--- a/net/rxrpc/call_accept.c\n+++ b/net/rxrpc/call_accept.c\n@@ -277,7 +277,7 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,\n \t\t * anticipation - and to save on stack space.\n \t\t */\n \t\txpeer = b->peer_backlog[peer_tail];\n-\t\tif (rxrpc_extract_addr_from_skb(&xpeer->srx, skb) < 0)\n+\t\tif (rxrpc_extract_addr_from_skb(local, &xpeer->srx, skb) < 0)\n \t\t\treturn NULL;\n \n \t\tpeer = rxrpc_lookup_incoming_peer(local, xpeer);\ndiff --git a/net/rxrpc/conn_object.c b/net/rxrpc/conn_object.c\nindex 929b50d5afe8..fe575798592f 100644\n--- a/net/rxrpc/conn_object.c\n+++ b/net/rxrpc/conn_object.c\n@@ -72,7 +72,7 @@ struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *local,\n \n \t_enter(\",%x\", sp->hdr.cid & RXRPC_CIDMASK);\n \n-\tif (rxrpc_extract_addr_from_skb(&srx, skb) < 0)\n+\tif (rxrpc_extract_addr_from_skb(local, &srx, skb) < 0)\n \t\tgoto not_found;\n \n \tk.epoch\t= sp->hdr.epoch;\ndiff --git a/net/rxrpc/local_event.c b/net/rxrpc/local_event.c\nindex 540d3955c1bc..93b5d910b4a1 100644\n--- a/net/rxrpc/local_event.c\n+++ b/net/rxrpc/local_event.c\n@@ -39,7 +39,7 @@ static void rxrpc_send_version_request(struct rxrpc_local *local,\n \n \t_enter(\"\");\n \n-\tif (rxrpc_extract_addr_from_skb(&srx, skb) < 0)\n+\tif (rxrpc_extract_addr_from_skb(local, &srx, skb) < 0)\n \t\treturn;\n \n \tmsg.msg_name\t= &srx.transport;\ndiff --git a/net/rxrpc/output.c b/net/rxrpc/output.c\nindex 5bd2d0fa4a03..71e6f713fbe7 100644\n--- a/net/rxrpc/output.c\n+++ b/net/rxrpc/output.c\n@@ -444,7 +444,7 @@ void rxrpc_reject_packets(struct rxrpc_local *local)\n \t\trxrpc_see_skb(skb, rxrpc_skb_rx_seen);\n \t\tsp = rxrpc_skb(skb);\n \n-\t\tif (rxrpc_extract_addr_from_skb(&srx, skb) == 0) {\n+\t\tif (rxrpc_extract_addr_from_skb(local, &srx, skb) == 0) {\n \t\t\tmsg.msg_namelen = srx.transport_len;\n \n \t\t\tcode = htonl(skb->priority);\ndiff --git a/net/rxrpc/peer_event.c b/net/rxrpc/peer_event.c\nindex 1ed9c0c2e94f..7f749505e699 100644\n--- a/net/rxrpc/peer_event.c\n+++ b/net/rxrpc/peer_event.c\n@@ -37,6 +37,7 @@ static struct rxrpc_peer *rxrpc_lookup_peer_icmp_rcu(struct rxrpc_local *local,\n \n \tmemset(&srx, 0, sizeof(srx));\n \tsrx.transport_type = local->srx.transport_type;\n+\tsrx.transport_len = local->srx.transport_len;\n \tsrx.transport.family = local->srx.transport.family;\n \n \t/* Can we see an ICMP4 packet on an ICMP6 listening socket?  and vice\n@@ -45,7 +46,6 @@ static struct rxrpc_peer *rxrpc_lookup_peer_icmp_rcu(struct rxrpc_local *local,\n \tswitch (srx.transport.family) {\n \tcase AF_INET:\n \t\tsrx.transport.sin.sin_port = serr->port;\n-\t\tsrx.transport_len = sizeof(struct sockaddr_in);\n \t\tswitch (serr->ee.ee_origin) {\n \t\tcase SO_EE_ORIGIN_ICMP:\n \t\t\t_net(\"Rx ICMP\");\n@@ -69,7 +69,6 @@ static struct rxrpc_peer *rxrpc_lookup_peer_icmp_rcu(struct rxrpc_local *local,\n #ifdef CONFIG_AF_RXRPC_IPV6\n \tcase AF_INET6:\n \t\tsrx.transport.sin6.sin6_port = serr->port;\n-\t\tsrx.transport_len = sizeof(struct sockaddr_in6);\n \t\tswitch (serr->ee.ee_origin) {\n \t\tcase SO_EE_ORIGIN_ICMP6:\n \t\t\t_net(\"Rx ICMP6\");\n@@ -79,6 +78,9 @@ static struct rxrpc_peer *rxrpc_lookup_peer_icmp_rcu(struct rxrpc_local *local,\n \t\t\tbreak;\n \t\tcase SO_EE_ORIGIN_ICMP:\n \t\t\t_net(\"Rx ICMP on v6 sock\");\n+\t\t\tsrx.transport.sin6.sin6_addr.s6_addr32[0] = 0;\n+\t\t\tsrx.transport.sin6.sin6_addr.s6_addr32[1] = 0;\n+\t\t\tsrx.transport.sin6.sin6_addr.s6_addr32[2] = htonl(0xffff);\n \t\t\tmemcpy(srx.transport.sin6.sin6_addr.s6_addr + 12,\n \t\t\t       skb_network_header(skb) + serr->addr_offset,\n \t\t\t       sizeof(struct in_addr));\ndiff --git a/net/rxrpc/rxkad.c b/net/rxrpc/rxkad.c\nindex 34c86d2bcae5..c38b3a1de56c 100644\n--- a/net/rxrpc/rxkad.c\n+++ b/net/rxrpc/rxkad.c\n@@ -634,8 +634,8 @@ static int rxkad_issue_challenge(struct rxrpc_connection *conn)\n \tchallenge.min_level\t= htonl(0);\n \tchallenge.__padding\t= 0;\n \n-\tmsg.msg_name\t= &conn->params.peer->srx.transport.sin;\n-\tmsg.msg_namelen\t= sizeof(conn->params.peer->srx.transport.sin);\n+\tmsg.msg_name\t= &conn->params.peer->srx.transport;\n+\tmsg.msg_namelen\t= conn->params.peer->srx.transport_len;\n \tmsg.msg_control\t= NULL;\n \tmsg.msg_controllen = 0;\n \tmsg.msg_flags\t= 0;\n@@ -689,8 +689,8 @@ static int rxkad_send_response(struct rxrpc_connection *conn,\n \n \t_enter(\"\");\n \n-\tmsg.msg_name\t= &conn->params.peer->srx.transport.sin;\n-\tmsg.msg_namelen\t= sizeof(conn->params.peer->srx.transport.sin);\n+\tmsg.msg_name\t= &conn->params.peer->srx.transport;\n+\tmsg.msg_namelen\t= conn->params.peer->srx.transport_len;\n \tmsg.msg_control\t= NULL;\n \tmsg.msg_controllen = 0;\n \tmsg.msg_flags\t= 0;\ndiff --git a/net/rxrpc/utils.c b/net/rxrpc/utils.c\nindex ff7af71c4b49..e801171fa351 100644\n--- a/net/rxrpc/utils.c\n+++ b/net/rxrpc/utils.c\n@@ -17,17 +17,28 @@\n /*\n  * Fill out a peer address from a socket buffer containing a packet.\n  */\n-int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *srx, struct sk_buff *skb)\n+int rxrpc_extract_addr_from_skb(struct rxrpc_local *local,\n+\t\t\t\tstruct sockaddr_rxrpc *srx,\n+\t\t\t\tstruct sk_buff *skb)\n {\n \tmemset(srx, 0, sizeof(*srx));\n \n \tswitch (ntohs(skb->protocol)) {\n \tcase ETH_P_IP:\n-\t\tsrx->transport_type = SOCK_DGRAM;\n-\t\tsrx->transport_len = sizeof(srx->transport.sin);\n-\t\tsrx->transport.sin.sin_family = AF_INET;\n-\t\tsrx->transport.sin.sin_port = udp_hdr(skb)->source;\n-\t\tsrx->transport.sin.sin_addr.s_addr = ip_hdr(skb)->saddr;\n+\t\tif (local->srx.transport.family == AF_INET6) {\n+\t\t\tsrx->transport_type = SOCK_DGRAM;\n+\t\t\tsrx->transport_len = sizeof(srx->transport.sin6);\n+\t\t\tsrx->transport.sin6.sin6_family = AF_INET6;\n+\t\t\tsrx->transport.sin6.sin6_port = udp_hdr(skb)->source;\n+\t\t\tsrx->transport.sin6.sin6_addr.s6_addr32[2] = htonl(0xffff);\n+\t\t\tsrx->transport.sin6.sin6_addr.s6_addr32[3] = ip_hdr(skb)->saddr;\n+\t\t} else {\n+\t\t\tsrx->transport_type = SOCK_DGRAM;\n+\t\t\tsrx->transport_len = sizeof(srx->transport.sin);\n+\t\t\tsrx->transport.sin.sin_family = AF_INET;\n+\t\t\tsrx->transport.sin.sin_port = udp_hdr(skb)->source;\n+\t\t\tsrx->transport.sin.sin_addr.s_addr = ip_hdr(skb)->saddr;\n+\t\t}\n \t\treturn 0;\n \n #ifdef CONFIG_AF_RXRPC_IPV6\n",
    "prefixes": [
        "net-next",
        "3/7"
    ]
}