Module Name: src Committed By: christos Date: Mon Apr 20 03:57:02 UTC 2020
Modified Files: src/sys/ufs/ufs: ufs_bmap.c Log Message: handle negative small block numbers for extattr To generate a diff of this commit: cvs rdiff -u -r1.52 -r1.53 src/sys/ufs/ufs/ufs_bmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/ufs/ufs/ufs_bmap.c diff -u src/sys/ufs/ufs/ufs_bmap.c:1.52 src/sys/ufs/ufs/ufs_bmap.c:1.53 --- src/sys/ufs/ufs/ufs_bmap.c:1.52 Sat Mar 18 01:33:06 2017 +++ src/sys/ufs/ufs/ufs_bmap.c Sun Apr 19 23:57:02 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_bmap.c,v 1.52 2017/03/18 05:33:06 riastradh Exp $ */ +/* $NetBSD: ufs_bmap.c,v 1.53 2020/04/20 03:57:02 christos Exp $ */ /* * Copyright (c) 1989, 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_bmap.c,v 1.52 2017/03/18 05:33:06 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_bmap.c,v 1.53 2020/04/20 03:57:02 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -190,6 +190,13 @@ ufs_bmaparray(struct vnode *vp, daddr_t } } return (0); + } else if (bn < 0 && bn >= -UFS_NXADDR) { + KASSERT(ump->um_fstype == UFS2); + daddr = ufs_rw64(ip->i_ffs2_extb[-1 - bn], UFS_MPNEEDSWAP(ump)); + *bnp = blkptrtodb(ump, daddr); + if (*bnp == 0) + *bnp = -1; + return 0; } xap = ap == NULL ? a : ap;