jfs: define xtree root and page independently
PATCH 1/1 jfs: define xtree root and page independently
From: Dave Kleikamp <[email protected]>
[ Upstream commit a779ed754e52d582b8c0e17959df063108bd0656 ]
In order to make array bounds checking sane, provide a separate definition of the in-inode xtree root and the external xtree page.
--- fs/jfs/jfs_dinode.h | 2 +- fs/jfs/jfs_imap.c | 6 +++--- fs/jfs/jfs_incore.h | 2 +- fs/jfs/jfs_txnmgr.c | 4 ++-- fs/jfs/jfs_xtree.c | 4 ++-- fs/jfs/jfs_xtree.h | 37 +++++++++++++++++++++++-------------- 6 files changed, 32 insertions(+), 23 deletions(-)
fs/jfs/jfs_dinode.h +1 -1
@@ -96,7 +96,7 @@ struct dinode {#define di_gengen u._file._u1._imap._gengenunion { -xtpage_t _xtroot; +xtroot_t _xtroot;struct {u8 unused[16 ];/* 16: */ dxd_t _dxd;/* 16: */
fs/jfs/jfs_imap.c +3 -3
@@ -669,7 +669,7 @@ int diWrite(tid_t tid, struct inode *ip)* This is the special xtree inside the directory for storing * the directory table */ -xtpage_t *p, *xp; +xtroot_t *p, *xp;xad_t *xad; jfs_ip->xtlid =0 ;
@@ -683,7 +683,7 @@ int diWrite(tid_t tid, struct inode *ip)* copy xtree root from inode to dinode: */ p = &jfs_ip->i_xtroot; - xp = (xtpage_t *) &dp->di_dirtable; + xp = (xtroot_t *) &dp->di_dirtable; lv = ilinelock->lv;for (n =0 ; n < ilinelock->index; n++, lv++) { memcpy(&xp->xad[lv->offset], &p->xad[lv->offset],
@@ -712,7 +712,7 @@ int diWrite(tid_t tid, struct inode *ip)* regular file: 16 byte (XAD slot) granularity */ if (type & tlckXTREE) { -xtpage_t *p, *xp; +xtroot_t *p, *xp;xad_t *xad;/*
fs/jfs/jfs_incore.h +1 -1
@@ -66,7 +66,7 @@ struct jfs_inode_info {lid_t xtlid;/* lid of xtree lock on directory */ union {struct { -xtpage_t _xtroot;/* 288: xtree root */ +xtroot_t _xtroot;/* 288: xtree root */ struct inomap *_imap;/* 4: inode map header */ } file;struct {
fs/jfs/jfs_txnmgr.c +2 -2
@@ -778,7 +778,7 @@ struct tlock *txLock(tid_t tid, struct inode *ip, struct metapage * mp,if (mp->xflag &COMMIT_PAGE ) p = (xtpage_t *) mp->data;else - p = &jfs_ip->i_xtroot; + p = (xtpage_t *) &jfs_ip->i_xtroot; xtlck->lwm.offset =le16_to_cpu (p->header.nextindex); }
@@ -1671,7 +1671,7 @@ static void xtLog(struct jfs_log * log, struct tblock * tblk, struct lrd * lrd,if (tlck->type & tlckBTROOT) { lrd->log.redopage.type |=cpu_to_le16 (LOG_BTROOT ); - p = &JFS_IP (ip)->i_xtroot; + p = (xtpage_t *) &JFS_IP (ip)->i_xtroot;if (S_ISDIR (ip->i_mode)) lrd->log.redopage.type |=cpu_to_le16 (LOG_DIR_XTREE );
fs/jfs/jfs_xtree.c +2 -2
@@ -1213,7 +1213,7 @@ xtSplitRoot(tid_t tid,struct xtlock *xtlck;int rc; - sp = &JFS_IP (ip)->i_xtroot; + sp = (xtpage_t *) &JFS_IP (ip)->i_xtroot;INCREMENT (xtStat.split);
@@ -2098,7 +2098,7 @@ int xtAppend(tid_t tid, /* transaction id */*/ void xtInitRoot (tid_t tid,struct inode *ip) { -xtpage_t *p; +xtroot_t *p;/* * acquire a transaction lock on the root
fs/jfs/jfs_xtree.h +23 -14
@@ -65,24 +65,33 @@ struct xadlist {#define XTPAGEMAXSLOT 256#define XTENTRYSTART 2 -/* -* xtree page: -*/ -typedef union { -struct xtheader { -__le64 next;/* 8: */ -__le64 prev;/* 8: */ +struct xtheader { +__le64 next;/* 8: */ +__le64 prev;/* 8: */ -u8 flag;/* 1: */ -u8 rsrvd1;/* 1: */ -__le16 nextindex;/* 2: next index = number of entries */ -__le16 maxentry;/* 2: max number of entries */ -__le16 rsrvd2;/* 2: */ +u8 flag;/* 1: */ +u8 rsrvd1;/* 1: */ +__le16 nextindex;/* 2: next index = number of entries */ +__le16 maxentry;/* 2: max number of entries */ +__le16 rsrvd2;/* 2: */ -pxd_t self;/* 8: self */ - } header;/* (32) */ +pxd_t self;/* 8: self */ +}; +/* +* xtree root (in inode): +*/ +typedef union { +struct xtheader header;xad_t xad[XTROOTMAXSLOT ];/* 16 * maxentry: xad array */ +}xtroot_t ; + +/* +* xtree page: +*/ +typedef union { +struct xtheader header; +xad_t xad[XTPAGEMAXSLOT ];/* 16 * maxentry: xad array */ }xtpage_t ;/*
base-commit: 46df6964c1a9eb72027710f626cb1c6bfb5d58c9
Signature · 1 line
2.39.2
Greg KH
maintainerQuoted 11 lines · Sergio González Collado
From: Dave Kleikamp <[email protected]>
[ Upstream commit
a779ed754e52d582b8c0e17959df063108bd0656]In order to make array bounds checking sane, provide a separate definition of the in-inode xtree root and the external xtree page.
Signed-off-by Dave Kleikamp <[email protected]>Tested-by Manas Ghandat <[email protected]>(cherry picked from commit a779ed754e52d582b8c0e17959df063108bd0656)Signed-off-by Sergio González Collado <[email protected]>
You submitted this for a lot of kernel trees that are not supported at all (i.e. end-of-life). There's nothing we can do with those backports, sorry.
You can always see the active kernel versions on the front page of kernel.org.
thanks,
greg k-h