lkml.org 
[lkml]   [2019]   [May]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 183/276] block: sed-opal: fix IOC_OPAL_ENABLE_DISABLE_MBR
    Date
    [ Upstream commit 78bf47353b0041865564deeed257a54f047c2fdc ]

    The implementation of IOC_OPAL_ENABLE_DISABLE_MBR handled the value
    opal_mbr_data.enable_disable incorrectly: enable_disable is expected
    to be one of OPAL_MBR_ENABLE(0) or OPAL_MBR_DISABLE(1). enable_disable
    was passed directly to set_mbr_done and set_mbr_enable_disable where
    is was interpreted as either OPAL_TRUE(1) or OPAL_FALSE(0). The end
    result was that calling IOC_OPAL_ENABLE_DISABLE_MBR with OPAL_MBR_ENABLE
    actually disabled the shadow MBR and vice versa.

    This patch adds correct conversion from OPAL_MBR_DISABLE/ENABLE to
    OPAL_FALSE/TRUE. The change affects existing programs using
    IOC_OPAL_ENABLE_DISABLE_MBR but this is typically used only once when
    setting up an Opal drive.

    Acked-by: Jon Derrick <jonathan.derrick@intel.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Scott Bauer <sbauer@plzdonthack.me>
    Signed-off-by: David Kozub <zub@linux.fjfi.cvut.cz>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    block/sed-opal.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/block/sed-opal.c b/block/sed-opal.c
    index e0de4dd448b3c..1196408972937 100644
    --- a/block/sed-opal.c
    +++ b/block/sed-opal.c
    @@ -2095,13 +2095,16 @@ static int opal_erase_locking_range(struct opal_dev *dev,
    static int opal_enable_disable_shadow_mbr(struct opal_dev *dev,
    struct opal_mbr_data *opal_mbr)
    {
    + u8 enable_disable = opal_mbr->enable_disable == OPAL_MBR_ENABLE ?
    + OPAL_TRUE : OPAL_FALSE;
    +
    const struct opal_step mbr_steps[] = {
    { opal_discovery0, },
    { start_admin1LSP_opal_session, &opal_mbr->key },
    - { set_mbr_done, &opal_mbr->enable_disable },
    + { set_mbr_done, &enable_disable },
    { end_opal_session, },
    { start_admin1LSP_opal_session, &opal_mbr->key },
    - { set_mbr_enable_disable, &opal_mbr->enable_disable },
    + { set_mbr_enable_disable, &enable_disable },
    { end_opal_session, },
    { NULL, }
    };
    @@ -2221,7 +2224,7 @@ static int __opal_lock_unlock(struct opal_dev *dev,

    static int __opal_set_mbr_done(struct opal_dev *dev, struct opal_key *key)
    {
    - u8 mbr_done_tf = 1;
    + u8 mbr_done_tf = OPAL_TRUE;
    const struct opal_step mbrdone_step [] = {
    { opal_discovery0, },
    { start_admin1LSP_opal_session, key },
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-05-30 06:10    [W:3.452 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site