get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 35360,
    "url": "http://patches.dpdk.org/api/patches/35360/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180222181910.23134-4-maxime.coquelin@redhat.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20180222181910.23134-4-maxime.coquelin@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180222181910.23134-4-maxime.coquelin@redhat.com",
    "date": "2018-02-22T18:19:10",
    "name": "[dpdk-dev,RFC,3/3] vhost_user: work around invalid rings addresses sent by QEMU",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f78325460f2de4cf010f8a96b08db658741f29f5",
    "submitter": {
        "id": 512,
        "url": "http://patches.dpdk.org/api/people/512/?format=api",
        "name": "Maxime Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patches.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180222181910.23134-4-maxime.coquelin@redhat.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/35360/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/35360/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 27C8E1B1B0;\n\tThu, 22 Feb 2018 19:19:38 +0100 (CET)",
            "from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73])\n\tby dpdk.org (Postfix) with ESMTP id D52851B1A4\n\tfor <dev@dpdk.org>; Thu, 22 Feb 2018 19:19:35 +0100 (CET)",
            "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3])\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 7B88740267C9;\n\tThu, 22 Feb 2018 18:19:35 +0000 (UTC)",
            "from localhost.localdomain (ovpn-112-33.ams2.redhat.com\n\t[10.36.112.33])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 24B151049460;\n\tThu, 22 Feb 2018 18:19:33 +0000 (UTC)"
        ],
        "From": "Maxime Coquelin <maxime.coquelin@redhat.com>",
        "To": "jianfeng.tan@intel.com, stefanha@redhat.com, tiwei.bie@intel.com,\n\tjfreimann@redhat.com, dev@dpdk.org",
        "Cc": "Maxime Coquelin <maxime.coquelin@redhat.com>",
        "Date": "Thu, 22 Feb 2018 19:19:10 +0100",
        "Message-Id": "<20180222181910.23134-4-maxime.coquelin@redhat.com>",
        "In-Reply-To": "<20180222181910.23134-1-maxime.coquelin@redhat.com>",
        "References": "<20180222181910.23134-1-maxime.coquelin@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.78 on 10.11.54.3",
        "X-Greylist": [
            "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.11.55.6]); Thu, 22 Feb 2018 18:19:35 +0000 (UTC)",
            "inspected by milter-greylist-4.5.16 (mx1.redhat.com\n\t[10.11.55.6]); \n\tThu, 22 Feb 2018 18:19:35 +0000 (UTC) for IP:'10.11.54.3'\n\tDOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com'\n\tHELO:'smtp.corp.redhat.com' FROM:'maxime.coquelin@redhat.com' RCPT:''"
        ],
        "Subject": "[dpdk-dev] [RFC 3/3] vhost_user: work around invalid rings\n\taddresses sent by QEMU",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "When the guest driver driver does not initialize all the queues,\nQEMU currently sends SET_VRING_ADDR request for these queues.\nIn this case all the desc, avail and used addresses have GPA 0,\nso translating them likely succeed.\n\nThe problem is that even if the uninitialized queues remain\ndisabled, the host application may request to disable the\nnotifications using rte_vhost_enable_guest_notification().\nDoing this results in writing 0 to the used ring flag field,\nso resulting in writing 0 in the guest physical address 0.\n\nThis patch adds a check to ensure all the ring addresses are\ndifferent before their translation.\n\nWhen VHOST_USER_F_PROTOCOL_VIRTIO_STATUS and VIRTIO_F_VERSION_1\nhave been negotiated, the uninitialized queues will be removed\nwhen driver sets the DRIVER_OK status bit.\nOtherwise, the port will never start to avoid any guest memory\ncorruption.\n\nSigned-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>\n---\n lib/librte_vhost/vhost_user.c | 13 +++++++++++++\n 1 file changed, 13 insertions(+)",
    "diff": "diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c\nindex 7ab02c44b..ad4d16492 100644\n--- a/lib/librte_vhost/vhost_user.c\n+++ b/lib/librte_vhost/vhost_user.c\n@@ -448,6 +448,19 @@ translate_ring_addresses(struct virtio_net *dev, int vq_index)\n \tif (vq->desc && vq->avail && vq->used)\n \t\treturn dev;\n \n+\t/*\n+\t * QEMU currently sends SET_VRING_ADDR request even for queues\n+\t * not initialized by the guest driver. In this case, all rings\n+\t * addresses are identical (GPA 0).\n+\t */\n+\tif (addr->desc_user_addr == addr->avail_user_addr &&\n+\t\t\taddr->desc_user_addr == addr->used_user_addr) {\n+\t\tRTE_LOG(INFO, VHOST_CONFIG,\n+\t\t\t\t\"Invalid rings addresses for dev %d queue %d\\n\",\n+\t\t\t\tdev->vid, vq_index);\n+\t\treturn dev;\n+\t}\n+\n \tvq->desc = (struct vring_desc *)(uintptr_t)ring_addr_to_vva(dev,\n \t\t\tvq, addr->desc_user_addr, sizeof(struct vring_desc));\n \tif (vq->desc == 0) {\n",
    "prefixes": [
        "dpdk-dev",
        "RFC",
        "3/3"
    ]
}