# git rev-parse -q --verify d4252071b97d2027d246f6a82cbee4d52f618b47^{commit} d4252071b97d2027d246f6a82cbee4d52f618b47 already have revision, skipping fetch # git checkout -q -f -B kisskb d4252071b97d2027d246f6a82cbee4d52f618b47 # git clean -qxdf # < git log -1 # commit d4252071b97d2027d246f6a82cbee4d52f618b47 # Author: Mikulas Patocka # Date: Tue Aug 9 14:32:13 2022 -0400 # # add barriers to buffer_uptodate and set_buffer_uptodate # # Let's have a look at this piece of code in __bread_slow: # # get_bh(bh); # bh->b_end_io = end_buffer_read_sync; # submit_bh(REQ_OP_READ, 0, bh); # wait_on_buffer(bh); # if (buffer_uptodate(bh)) # return bh; # # Neither wait_on_buffer nor buffer_uptodate contain any memory barrier. # Consequently, if someone calls sb_bread and then reads the buffer data, # the read of buffer data may be executed before wait_on_buffer(bh) on # architectures with weak memory ordering and it may return invalid data. # # Fix this bug by adding a memory barrier to set_buffer_uptodate and an # acquire barrier to buffer_uptodate (in a similar way as # folio_test_uptodate and folio_mark_uptodate). # # Signed-off-by: Mikulas Patocka # Reviewed-by: Matthew Wilcox (Oracle) # Cc: stable@vger.kernel.org # Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/korg/gcc-11.1.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-11.1.0-nolibc/aarch64-linux/bin/aarch64-linux-ld --version # < git log --format=%s --max-count=1 d4252071b97d2027d246f6a82cbee4d52f618b47 # < make -s -j 8 ARCH=arm64 O=/kisskb/build/linus_arm64-allnoconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.1.0-nolibc/aarch64-linux/bin/aarch64-linux- allnoconfig # < make -s -j 8 ARCH=arm64 O=/kisskb/build/linus_arm64-allnoconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.1.0-nolibc/aarch64-linux/bin/aarch64-linux- help # make -s -j 8 ARCH=arm64 O=/kisskb/build/linus_arm64-allnoconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.1.0-nolibc/aarch64-linux/bin/aarch64-linux- olddefconfig # make -s -j 8 ARCH=arm64 O=/kisskb/build/linus_arm64-allnoconfig_arm64-gcc11 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-11.1.0-nolibc/aarch64-linux/bin/aarch64-linux- Completed OK # rm -rf /kisskb/build/linus_arm64-allnoconfig_arm64-gcc11 # Build took: 0:01:01.520917