• Joel Stanley's avatar
    powerpc/powernv: Fix reading of OPAL msglog · caf69ba6
    Joel Stanley authored
    memory_return_from_buffer returns a signed value, so ret should be
    ssize_t.
    
    Fixes the following issue reported by David Binderman:
    
      [linux-3.15/arch/powerpc/platforms/powernv/opal-msglog.c:65]: (style)
      Checking if unsigned variable 'ret' is less than zero.
      [linux-3.15/arch/powerpc/platforms/powernv/opal-msglog.c:82]: (style)
      Checking if unsigned variable 'ret' is less than zero.
    
      Local variable "ret" is of type size_t. This is always unsigned,
      so it is pointless to check if it is less than zero.
    
      https://bugzilla.kernel.org/show_bug.cgi?id=77551
    
    Fixing this exposes a real bug for the case where the entire count
    bytes is successfully read from the POS_WRAP case. The second
    memory_read_from_buffer will return EINVAL, causing the entire read to
    return EINVAL to userspace, despite the data being copied correctly. The
    fix is to test for the case where the data has been read and return
    early.
    Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    caf69ba6
opal-msglog.c 2.86 KB