get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 553,
    "url": "http://patchwork.ozlabs.org/api/patches/553/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1221773464-28845-2-git-send-email-vladislav.yasevich@hp.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": "<1221773464-28845-2-git-send-email-vladislav.yasevich@hp.com>",
    "list_archive_url": null,
    "date": "2008-09-18T21:31:04",
    "name": "[2/2] sctp: Fix oops when INIT-ACK indicates that peer doesn't support AUTH",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "e5e3285f8ffec75e9e8921df8bdf8d25a27742a1",
    "submitter": {
        "id": 279,
        "url": "http://patchwork.ozlabs.org/api/people/279/?format=api",
        "name": "Vlad Yasevich",
        "email": "vladislav.yasevich@hp.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1221773464-28845-2-git-send-email-vladislav.yasevich@hp.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/553/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/553/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 E7157DDFE7\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 19 Sep 2008 07:31:19 +1000 (EST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1755788AbYIRVbO (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 18 Sep 2008 17:31:14 -0400",
            "(majordomo@vger.kernel.org) by vger.kernel.org id S1755688AbYIRVbO\n\t(ORCPT <rfc822; netdev-outgoing>); Thu, 18 Sep 2008 17:31:14 -0400",
            "from g1t0026.austin.hp.com ([15.216.28.33]:14434 \"EHLO\n\tg1t0026.austin.hp.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1754741AbYIRVbK (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 18 Sep 2008 17:31:10 -0400",
            "from smtp1.fc.hp.com (smtp.fc.hp.com [15.15.136.127])\n\tby g1t0026.austin.hp.com (Postfix) with ESMTP id 02581D034;\n\tThu, 18 Sep 2008 21:31:08 +0000 (UTC)",
            "from localhost.localdomain (squirrel.fc.hp.com [15.11.146.57])\n\tby smtp1.fc.hp.com (Postfix) with ESMTP id 12F0B203427;\n\tThu, 18 Sep 2008 21:16:43 +0000 (UTC)"
        ],
        "From": "Vlad Yasevich <vladislav.yasevich@hp.com>",
        "To": "davem@davemloft.net",
        "Cc": "linux-sctp@vger.kernel.org,\n\tlksctp-developers@lists.sourceforge.net, netdev@vger.kernel.org,\n\tVlad Yasevich <vladislav.yasevich@hp.com>",
        "Subject": "[PATCH 2/2] sctp: Fix oops when INIT-ACK indicates that peer\n\tdoesn't support AUTH",
        "Date": "Thu, 18 Sep 2008 17:31:04 -0400",
        "Message-Id": "<1221773464-28845-2-git-send-email-vladislav.yasevich@hp.com>",
        "X-Mailer": "git-send-email 1.5.3.5",
        "In-Reply-To": "<1221773464-28845-1-git-send-email-vladislav.yasevich@hp.com>",
        "References": "<1221773464-28845-1-git-send-email-vladislav.yasevich@hp.com>",
        "X-Brightmail-Tracker": "AAAAAQAAAAI=",
        "X-Whitelist": "TRUE",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "If INIT-ACK is received with SupportedExtensions parameter which\nindicates that the peer does not support AUTH, the packet will be\nsilently ignore, and sctp_process_init() do cleanup all of the\ntransports in the association.\nWhen T1-Init timer is expires, OOPS happen while we try to choose\na different init transport.\n\nThe solution is to only clean up the non-active transports, i.e\nthe ones that the peer added.  However, that introduces a problem\nwith sctp_connectx(), because we don't mark the proper state for\nthe transports provided by the user.  So, we'll simply mark\nuser-provided transports as ACTIVE.  That will allow INIT\nretransmissions to work properly in the sctp_connectx() context\nand prevent the crash.\n\nSigned-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>",
    "diff": "diff --git a/net/sctp/associola.c b/net/sctp/associola.c\nindex 8472b8b..abd51ce 100644\n--- a/net/sctp/associola.c\n+++ b/net/sctp/associola.c\n@@ -599,11 +599,12 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,\n \t/* Check to see if this is a duplicate. */\n \tpeer = sctp_assoc_lookup_paddr(asoc, addr);\n \tif (peer) {\n+\t\t/* An UNKNOWN state is only set on transports added by\n+\t\t * user in sctp_connectx() call.  Such transports should be\n+\t\t * considered CONFIRMED per RFC 4960, Section 5.4.\n+\t\t */\n \t\tif (peer->state == SCTP_UNKNOWN) {\n-\t\t\tif (peer_state == SCTP_ACTIVE)\n-\t\t\t\tpeer->state = SCTP_ACTIVE;\n-\t\t\tif (peer_state == SCTP_UNCONFIRMED)\n-\t\t\t\tpeer->state = SCTP_UNCONFIRMED;\n+\t\t\tpeer->state = SCTP_ACTIVE;\n \t\t}\n \t\treturn peer;\n \t}\ndiff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c\nindex fe94f42..b599cbb 100644\n--- a/net/sctp/sm_make_chunk.c\n+++ b/net/sctp/sm_make_chunk.c\n@@ -2321,12 +2321,10 @@ clean_up:\n \t/* Release the transport structures. */\n \tlist_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {\n \t\ttransport = list_entry(pos, struct sctp_transport, transports);\n-\t\tlist_del_init(pos);\n-\t\tsctp_transport_free(transport);\n+\t\tif (transport->state != SCTP_ACTIVE)\n+\t\t\tsctp_assoc_rm_peer(asoc, transport);\n \t}\n \n-\tasoc->peer.transport_count = 0;\n-\n nomem:\n \treturn 0;\n }\n",
    "prefixes": [
        "2/2"
    ]
}