lkml.org 
[lkml]   [2017]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v2 03/15] NTB: Fix UB/bug in ntb_mw_get_align()
    On Tue, Dec 5, 2017 at 12:56 PM, Serge Semin <fancer.lancer@gmail.com> wrote:
    > On Tue, Dec 05, 2017 at 11:52:32AM -0500, Jon Mason <jdmason@kudzu.us> wrote:
    >> On Sun, Dec 3, 2017 at 2:17 PM, Serge Semin <fancer.lancer@gmail.com> wrote:
    >> > Simple (1 << pidx) operation causes undefined behaviour when
    >> > pidx >= 32. It must be casted to u64 to match the actual return
    >> > value of ntb_link_is_up() method, so to have all the possible
    >> > peer indexes covered and to get rid of undefined behaviour.
    >> > Additionally there are special macros in "linux/bitops.h" to perform
    >> > the bit-set-shift operations, so it's recommended to have them used
    >> > for proper bit setting.
    >>
    >> This looks good to me, but also seems like a bug fix. Please comment
    >> on if this is not noticed.
    >>
    >
    > The consequences of the bug isn't noticeable at the moment, but potentially
    > it can be seen on the devices like Switchtec (when multi-portness is finally
    > added). Anyway it's better to fix it now, than to wait for obvious bug.
    > Additionally as I said the originator of the code should have used BIT_ULL
    > instead of the pure bit shifting.

    This is more of a question of whether it should go into -stable and be
    outside this patch set. If this is impossible to ever hit, then
    including it here instead of fast tracking it in -stable is fine.

    Thanks,
    Jon

    >
    > Thanks,
    > -Sergey
    >
    >> Thanks,
    >> Jon
    >>
    >> >
    >> > Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
    >> > Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
    >> > ---
    >> > include/linux/ntb.h | 2 +-
    >> > 1 file changed, 1 insertion(+), 1 deletion(-)
    >> >
    >> > diff --git a/include/linux/ntb.h b/include/linux/ntb.h
    >> > index c1646f2c6344..488e586fb76c 100644
    >> > --- a/include/linux/ntb.h
    >> > +++ b/include/linux/ntb.h
    >> > @@ -764,7 +764,7 @@ static inline int ntb_mw_get_align(struct ntb_dev *ntb, int pidx, int widx,
    >> > resource_size_t *size_align,
    >> > resource_size_t *size_max)
    >> > {
    >> > - if (!(ntb_link_is_up(ntb, NULL, NULL) & (1 << pidx)))
    >> > + if (!(ntb_link_is_up(ntb, NULL, NULL) & BIT_ULL(pidx)))
    >> > return -ENOTCONN;
    >> >
    >> > return ntb->ops->mw_get_align(ntb, pidx, widx, addr_align, size_align,
    >> > --
    >> > 2.12.0
    >> >

    \
     
     \ /
      Last update: 2017-12-05 19:09    [W:2.955 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site