lkml.org 
[lkml]   [2017]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 036/319] xen-blkback: only read request operation from shared ring once
    Date
    From: Roger Pau Monné <roger.pau@citrix.com>

    commit 1f13d75ccb806260079e0679d55d9253e370ec8a upstream.

    A compiler may load a switch statement value multiple times, which could
    be bad when the value is in memory shared with the frontend.

    When converting a non-native request to a native one, ensure that
    src->operation is only loaded once by using READ_ONCE().

    This is part of XSA155.

    Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: "Jan Beulich" <JBeulich@suse.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    ---
    drivers/block/xen-blkback/common.h | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
    index 60103e2..6774cba 100644
    --- a/drivers/block/xen-blkback/common.h
    +++ b/drivers/block/xen-blkback/common.h
    @@ -269,8 +269,8 @@ static inline void blkif_get_x86_32_req(struct blkif_request *dst,
    struct blkif_x86_32_request *src)
    {
    int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
    - dst->operation = src->operation;
    - switch (src->operation) {
    + dst->operation = READ_ONCE(src->operation);
    + switch (dst->operation) {
    case BLKIF_OP_READ:
    case BLKIF_OP_WRITE:
    case BLKIF_OP_WRITE_BARRIER:
    @@ -305,8 +305,8 @@ static inline void blkif_get_x86_64_req(struct blkif_request *dst,
    struct blkif_x86_64_request *src)
    {
    int i, n = BLKIF_MAX_SEGMENTS_PER_REQUEST;
    - dst->operation = src->operation;
    - switch (src->operation) {
    + dst->operation = READ_ONCE(src->operation);
    + switch (dst->operation) {
    case BLKIF_OP_READ:
    case BLKIF_OP_WRITE:
    case BLKIF_OP_WRITE_BARRIER:
    --
    2.8.0.rc2.1.gbe9624a
    \
     
     \ /
      Last update: 2017-02-05 21:22    [W:4.590 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site