"value":"In the Linux kernel, the following vulnerability has been resolved:\n\nbtrfs: fix crash on racing fsync and size-extending write into prealloc\n\nWe have been seeing crashes on duplicate keys in\nbtrfs_set_item_key_safe():\n\n BTRFS critical (device vdb): slot 4 key (450 108 8192) new key (450 108 8192)\n ------------[ cut here ]------------\n kernel BUG at fs/btrfs/ctree.c:2620!\n invalid opcode: 0000 [#1] PREEMPT SMP PTI\n CPU: 0 PID: 3139 Comm: xfs_io Kdump: loaded Not tainted 6.9.0 #6\n Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014\n RIP: 0010:btrfs_set_item_key_safe+0x11f/0x290 [btrfs]\n\nWith the following stack trace:\n\n #0 btrfs_set_item_key_safe (fs/btrfs/ctree.c:2620:4)\n #1 btrfs_drop_extents (fs/btrfs/file.c:411:4)\n #2 log_one_extent (fs/btrfs/tree-log.c:4732:9)\n #3 btrfs_log_changed_extents (fs/btrfs/tree-log.c:4955:9)\n #4 btrfs_log_inode (fs/btrfs/tree-log.c:6626:9)\n #5 btrfs_log_inode_parent (fs/btrfs/tree-log.c:7070:8)\n #6 btrfs_log_dentry_safe (fs/btrfs/tree-log.c:7171:8)\n #7 btrfs_sync_file (fs/btrfs/file.c:1933:8)\n #8 vfs_fsync_range (fs/sync.c:188:9)\n #9 vfs_fsync (fs/sync.c:202:9)\n #10 do_fsync (fs/sync.c:212:9)\n #11 __do_sys_fdatasync (fs/sync.c:225:9)\n #12 __se_sys_fdatasync (fs/sync.c:223:1)\n #13 __x64_sys_fdatasync (fs/sync.c:223:1)\n #14 do_syscall_x64 (arch/x86/entry/common.c:52:14)\n #15 do_syscall_64 (arch/x86/entry/common.c:83:7)\n #16 entry_SYSCALL_64+0xaf/0x14c (arch/x86/entry/entry_64.S:121)\n\nSo we're logging a changed extent from fsync, which is splitting an\nextent in the log tree. But this split part already exists in the tree,\ntriggering the BUG().\n\nThis is the state of the log tree at the time of the crash, dumped with\ndrgn (https://github.com/osandov/drgn/blob/main/contrib/btrfs_tree.py)\nto get more details than btrfs_print_leaf() gives us:\n\n >>> print_extent_buffer(prog.crashed_thread().stack_trace()[0][\"eb\"])\nleaf33439744level0items72generation9owner18446744073709551610\nleaf33439744flags0x100000000000000\nfsuuide5bd3946-400c-4223-8923-190ef1f18677\nchunkuuidd58cb17e-6d02-494a-829a-18b7d8a399da\nitem0key(450INODE_ITEM0)itemoff16123itemsize160\ngeneration7transid9size8192nbytes8473563889606862198\nblockgroup0mode100600links1uid0gid0rdev0\nsequence204flags0x10(PREALLOC)\natime1716417703.220000000(2024-05-2215:41:43)\nctime1716417704.983333333(2024-05-2215:41:44)\nmtime1716417704.983333333(2024-05-2215:41:44)\notime17592186044416.000000000(559444-03-0801:40:16)\nitem1key(450INODE_REF256)itemoff16110itemsize13\nindex195namelen3name:193\nitem2key(450XATTR_ITEM1640047104)itemoff16073itemsize37\nlocationkey(0UNKNOWN.00)typeXATTR\ntransid7data_len1name_len6\nname:user.a\ndataa\nitem3key(450EXTENT_DATA0)itemoff16020itemsize53\ngeneration9type1(regular)\nextentdatadiskbyte303144960nr12288\nextentdataoffset0nr4096ram12288\nextentcompression0(none)\nitem4key(450EXTENT_DATA4096)itemoff15967itemsize53\ngeneration9type2(prealloc)\npreallocdatadiskbyte303144960nr12288\npreallocdataoffset4096nr8192\nitem5key(450EXTENT_DATA8192)itemoff15914itemsize53\ngeneration9type2(prealloc)\npreallocdatadiskbyte303144960nr12288\npreallocdataoffset8192nr4096\n...\n\nSotherealproblemhappenedearlier:noticethatitems4(4k-12k)and5\n(8k-12k)overlap.Botharepreallocextents.Item4straddlesi_sizeand\nitem5startsati_size.\n\nHereisthestateof\n---truncate
"value":"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: btrfs: corrige el fallo en fsync de ejecuci\u00f3ns y escritura de extensi\u00f3n de tama\u00f1o en prealloc. Hemos estado viendo fallos en claves duplicadas en btrfs_set_item_key_safe(): BTRFS cr\u00edtico (dispositivo vdb): clave de ranura 4 ( 450 108 8192) nueva clave (450 108 8192) ------------[ cortar aqu\u00ed ]------------ ERROR del kernel en fs/btrfs/ctree.c: 2620! c\u00f3digo de operaci\u00f3n no v\u00e1lido: 0000 [#1] PREEMPT SMP PTI CPU: 0 PID: 3139 Comm: xfs_io Kdump: cargado No contaminado 6.9.0 #6 Nombre de hardware: PC est\u00e1ndar QEMU (i440FX + PIIX, 1996), BIOS 1.16.3-2 .fc40 01/04/2014 RIP: 0010:btrfs_set_item_key_safe+0x11f/0x290 [btrfs] Con el siguiente seguimiento de pila: #0 btrfs_set_item_key_safe (fs/btrfs/ctree.c:2620:4) #1 btrfs_drop_extents (fs/btrfs/file .c:411:4) #2 log_one_extent (fs/btrfs/tree-log.c:4732:9) #3 btrfs_log_changed_extents (fs/btrfs/tree-log.c:4955:9) #4 btrfs_log_inode (fs/btrfs /tree-log.c:6626:9) #5 btrfs_log_inode_parent (fs/btrfs/tree-log.c:7070:8) #6 btrfs_log_dentry_safe (fs/btrfs/tree-log.c:7171:8) #7 btrfs_sync_file (fs/btrfs/file.c:1933:8) #8 vfs_fsync_range (fs/sync.c:188:9) #9 vfs_fsync (fs/sync.c:202:9) #10 do_fsync (fs/sync.c :212:9) #11 __do_sys_fdatasync (fs/sync.c:225:9) #12 __se_sys_fdatasync (fs/sync.c:223:1) #13 __x64_sys_fdatasync (fs/sync.c:223:1) #14 do_syscall_x64 (arch/x86/entry/common.c:52:14) #15 do_syscall_64 (arch/x86/entry/common.c:83:7) #16 Entry_SYSCALL_64+0xaf/0x14c (arch/x86/entry/entry_64.S :121) As\u00ed que estamos registrando una extensi\u00f3n modificada desde fsync, que es dividir una extensi\u00f3n en el \u00e1rbol de registro. Pero esta parte dividida ya existe en el \u00e1rbol, lo que activa el ERROR(). Este es el estado del \u00e1rbol de registro en el momento del bloqueo, descargado con drgn (https://github.com/osandov/drgn/blob/main/contrib/btrfs_tree.py) para obtener m\u00e1s detalles de los que proporciona btrfs_print_leaf() nosotros: >>> print_extent_buffer(prog.crashed_thread().stack_trace()[0][\"eb\"])hoja33439744elementosdenivel072generaci\u00f3n9propietario18446744073709551610hoja33439744banderas0x100000000000000fsuuid00c-4223-8923-190ef1f18677fragmentouuidd58cb17e-6d02-494a-829a-18b7d8a399daclavedelelemento0(450INODE_ITEM0)itemoff16123tama\u00f1odelelemento160generaci\u00f3n7transid9tama\u00f1o8192nbytes8473563889606862198grupodebloques0modo100600enlaces1uid0gid0rdev0secuencia204banderas0x10(PREALLOC)atime1716417703.220000000(2024-05-2215:41:43)ctime1716417704.983333333(2024-05-2215:41:44)mtime1716417704.983333333(2024-05-2)215:41:44)otime17592186044416.000000000(559444-03-0801:40:16)clavedelelemento1(450INODE_REF256)itemoff16110tama\u00f1odelelemento13\u00edndice195namelen3nombre:193clavedelelemento2(450XATTR_ITEM1640047104)itemoff16073tama\u00f1odelelemento37clavedeubicaci\u00f3n(0UNKNOWN.00)tipoXATTRtransid7data_len1name_len6nombre:usuario.adatosaelemento3clave(450EXTENT_DATA0)itemoff16020tama\u00f1odeelemento53generaci\u00f3n9tipo1(normal)bytedediscodedatosdeextensi\u00f3n303144960nr12288desplazamientodedatosdeextensi\u00f3n0nr4096ram12288compresi\u00f3ndeextensi\u00f3n0(ninguno)clavedelelemento4(450EXTENT_DATA4096)itemoff15967tama\u00f1odelelemento53generaci\u00f3n9tipo2(preasignaci\u00f3n)bytedediscodedatosdepreasignaci\u00f3n303144960nr12288compensaci\u00f3ndedatosdepreasignaci\u00f3n4096nr8192clavedelelemento5(450EXTENT_DATA8192)itemoff15914tama\u00f1odelelemento53generaci\u00f3n9tipo2(preasignaci\u00f3n)bytedediscodedatosdepreasignaci\u00f3n303144960nr12288desplazamientodedatosdepreasignaci\u00f3n8192nr4096...Entonces,elverdaderoproblemaocurri\u00f3antes:observequeloselementos4(4k-12k)y5(8k-12k)sesuperponen.Ambassonextensionesdepreasignaci\u00f3n.Elelemento4