No description
  • C 98.2%
  • Assembly 1%
  • Makefile 0.3%
  • Shell 0.2%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Coly Li c573e8673d bcache: fix overflow in offset_to_stripe()
commit 7a1481267999c02abf4a624515c1b5c7c1fccbd6 upstream.

offset_to_stripe() returns the stripe number (in type unsigned int) from
an offset (in type uint64_t) by the following calculation,
	do_div(offset, d->stripe_size);
For large capacity backing device (e.g. 18TB) with small stripe size
(e.g. 4KB), the result is 4831838208 and exceeds UINT_MAX. The actual
returned value which caller receives is 536870912, due to the overflow.

Indeed in bcache_device_init(), bcache_device->nr_stripes is limited in
range [1, INT_MAX]. Therefore all valid stripe numbers in bcache are
in range [0, bcache_dev->nr_stripes - 1].

This patch adds a upper limition check in offset_to_stripe(): the max
valid stripe number should be less than bcache_device->nr_stripes. If
the calculated stripe number from do_div() is equal to or larger than
bcache_device->nr_stripe, -EINVAL will be returned. (Normally nr_stripes
is less than INT_MAX, exceeding upper limitation doesn't mean overflow,
therefore -EOVERFLOW is not used as error code.)

This patch also changes nr_stripes' type of struct bcache_device from
'unsigned int' to 'int', and return value type of offset_to_stripe()
from 'unsigned int' to 'int', to match their exact data ranges.

All locations where bcache_device->nr_stripes and offset_to_stripe() are
referenced also get updated for the above type change.

Reported-and-tested-by: Ken Raeburn <raeburn@redhat.com>
Signed-off-by: Coly Li <colyli@suse.de>
Cc: stable@vger.kernel.org
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1783075
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-08-21 13:05:25 +02:00
arch powerpc: Fix circular dependency between percpu.h and mmu.h 2020-08-21 13:05:24 +02:00
block iocost: Fix check condition of iocg abs_vdebt 2020-08-19 08:15:58 +02:00
certs
crypto keys: asymmetric: fix error return code in software_key_query() 2020-07-22 09:33:04 +02:00
Documentation dt-bindings: iio: io-channel-mux: Fix compatible string in example code 2020-08-21 13:05:23 +02:00
drivers bcache: fix overflow in offset_to_stripe() 2020-08-21 13:05:25 +02:00
fs cifs: Fix leak when handling lease break for cached root fid 2020-08-21 13:05:24 +02:00
include net/compat: Add missing sock updates for SCM_RIGHTS 2020-08-21 13:05:25 +02:00
init x86: Fix early boot crash on gcc-10, third try 2020-05-20 08:20:34 +02:00
ipc ipc/util.c: sysvipc_find_ipc() incorrectly updates position index 2020-05-20 08:20:16 +02:00
kernel genirq/PM: Always unlock IRQ descriptor in rearm_wake_irq() 2020-08-21 13:05:20 +02:00
lib kobject: Avoid premature parent object freeing in kobject_cleanup() 2020-08-19 08:16:11 +02:00
LICENSES
mm mm/mmap.c: Add cond_resched() for exit_mmap() CPU stalls 2020-08-19 08:16:02 +02:00
net net/compat: Add missing sock updates for SCM_RIGHTS 2020-08-21 13:05:25 +02:00
samples bpf: Fix fds_example SIGSEGV error 2020-08-19 08:16:03 +02:00
scripts recordmcount: only record relocation of type R_AARCH64_CALL26 on arm64. 2020-08-19 08:15:57 +02:00
security Smack: prevent underflow in smk_set_cipso() 2020-08-19 08:16:16 +02:00
sound ALSA: usb-audio: add quirk for Pioneer DDJ-RB 2020-08-19 08:16:27 +02:00
tools tools, bpftool: Fix wrong return value in do_dump() 2020-08-19 08:16:19 +02:00
usr initramfs: restore default compression behavior 2020-04-08 09:08:38 +02:00
virt KVM: arm64: Don't inherit exec permission across page-table levels 2020-08-05 09:59:51 +02:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS MAINTAINERS: Update drm/i915 bug filing URL 2020-02-28 17:22:19 +01:00
Makefile Linux 5.4.59 2020-08-19 08:16:29 +02:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.