From: NeilBrown <neilb@suse.com>
To: lustre-devel@lists.lustre.org
Subject: [lustre-devel] [PATCH 24/24] lustre: discard TCD_MAX_TYPES
Date: Thu, 21 Jun 2018 14:28:39 +1000 [thread overview]
Message-ID: <87d0wkdaq0.fsf@notabene.neil.brown.name> (raw)
In-Reply-To: <alpine.LFD.2.21.1806210237500.3886@casper.infradead.org>
As well as CFS_TCD_TYPE_CNT we have TCD_MAX_TYPES which has a larger
value but a similar meaning. Discard it and just use
CFS_TCD_TYPE_CNT.
Two places relied on the fact that TCD_MAX_TYPES was larger and so
there would be NULLs at the end of the array. Change
them to check the array size properly.
Signed-off-by: NeilBrown <neilb@suse.com>
---
Thanks for testing James!
I found two problems.
1/ I had
- for (i = 0; cfs_trace_data[i] && i < CFS_TCD_TYPE_CNT; i++) {
instead of
+ for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i]; i++) {
So it could dereference beyond the end of an array. I don't this was
the problem.
2/ I hadn't changed
- for (i = 0; cfs_trace_data[i]; i++) \
to
+ for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i]; i++) \
so if cfs_trace_data[4] was non NULL, bad things could happen.
I suspect this is what happened to you.
Thanks,
NeilBrown
drivers/staging/lustre/lnet/libcfs/tracefile.c | 8 ++++----
drivers/staging/lustre/lnet/libcfs/tracefile.h | 5 ++---
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index cdef67391a72..cc399d580444 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -50,7 +50,7 @@
#include "tracefile.h"
/* XXX move things up to the top, comment */
-union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned;
+union cfs_trace_data_union (*cfs_trace_data[CFS_TCD_TYPE_CNT])[NR_CPUS] __cacheline_aligned;
char cfs_tracefile[TRACEFILE_NAME_SIZE];
long long cfs_tracefile_size = CFS_TRACEFILE_SIZE;
@@ -145,8 +145,8 @@ void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
spin_unlock(&tcd->tcd_lock);
}
-#define cfs_tcd_for_each_type_lock(tcd, i, cpu) \
- for (i = 0; cfs_trace_data[i] && \
+#define cfs_tcd_for_each_type_lock(tcd, i, cpu) \
+ for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i] && \
(tcd = &(*cfs_trace_data[i])[cpu].tcd) && \
cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
@@ -1381,7 +1381,7 @@ static void cfs_trace_cleanup(void)
cfs_trace_console_buffers[i][j] = NULL;
}
- for (i = 0; cfs_trace_data[i]; i++) {
+ for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i]; i++) {
kfree(cfs_trace_data[i]);
cfs_trace_data[i] = NULL;
}
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
index 23faecf886c1..87b00fc70b70 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
@@ -184,11 +184,10 @@ union cfs_trace_data_union {
char __pad[L1_CACHE_ALIGN(sizeof(struct cfs_trace_cpu_data))];
};
-#define TCD_MAX_TYPES 8
-extern union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS];
+extern union cfs_trace_data_union (*cfs_trace_data[CFS_TCD_TYPE_CNT])[NR_CPUS];
#define cfs_tcd_for_each(tcd, i, j) \
- for (i = 0; cfs_trace_data[i]; i++) \
+ for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i]; i++) \
for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd); \
j < num_possible_cpus(); \
j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
--
2.14.0.rc0.dirty
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20180621/7a937256/attachment.sig>
next prev parent reply other threads:[~2018-06-21 4:28 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-15 7:11 [lustre-devel] [PATCH 00/24] lustre - more cleanups including module reduction NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 23/24] lustre: renamed CFS_TCD_TYPE_MAX to CFS_TCD_TYPE_CNT NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 13/24] lustre: discard NO_QUOTA and QUOTA_OK NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 08/24] lustre: use truncate_inode_page in place of truncate_complete_page NeilBrown
2018-06-16 0:17 ` James Simmons
2018-06-16 0:52 ` NeilBrown
2018-06-16 0:59 ` Oleg Drokin
2018-06-18 2:03 ` NeilBrown
2018-06-25 0:02 ` [lustre-devel] [PATCH 1/3] lustre: use generic_error_remove_page() NeilBrown
2018-06-25 0:02 ` [lustre-devel] [PATCH 2/3] lustre: use delete_from_page_cache() for directory pages NeilBrown
2018-06-25 0:03 ` [lustre-devel] [PATCH 3/3] lustre: discard truncate_complete_page() NeilBrown
2018-06-26 0:19 ` James Simmons
2018-06-25 0:38 ` [lustre-devel] [PATCH 2/3] lustre: use delete_from_page_cache() for directory pages Oleg Drokin
2018-06-26 0:18 ` James Simmons
2018-06-25 0:38 ` [lustre-devel] [PATCH 1/3] lustre: use generic_error_remove_page() Oleg Drokin
2018-06-25 1:57 ` NeilBrown
2018-06-26 0:26 ` James Simmons
2018-06-26 0:14 ` James Simmons
2018-06-15 7:11 ` [lustre-devel] [PATCH 22/24] lustre: fold cfs_tracefile_*_arch into their only callers NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 17/24] lustre: remove lustre_compat.h NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 04/24] kbuild: disable KBUILD_MODNAME when building for mod.a NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 24/24] lustre: discard TCD_MAX_TYPES NeilBrown
2018-06-21 1:38 ` James Simmons
2018-06-21 4:28 ` NeilBrown [this message]
2018-06-24 20:37 ` James Simmons
2018-06-24 23:26 ` NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 21/24] lustre: move remainder of linux-tracefile.c to tracefile.c NeilBrown
2018-06-21 1:37 ` James Simmons
2018-06-22 3:19 ` NeilBrown
2018-06-24 20:29 ` James Simmons
2018-06-24 23:25 ` NeilBrown
2018-06-25 21:52 ` James Simmons
2018-06-15 7:11 ` [lustre-devel] [PATCH 14/24] lustre: discard ext2* bit operations NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 16/24] lustre: remove redefinition of module_init() NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 19/24] lustre: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb() NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 15/24] lustre: centralize TIMES_SET_FLAGS NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 06/24] lustre: build ldlm in the ldlm directory NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 07/24] lustre: merge libcfs module into lnet NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 10/24] lustre: remove lustre_patchless_compat.h NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 09/24] lustre: don't use spare bits in iattr.ia_valid NeilBrown
2018-06-21 1:35 ` James Simmons
2018-06-21 4:19 ` NeilBrown
2018-06-22 2:23 ` NeilBrown
2018-06-24 20:33 ` James Simmons
2018-06-24 23:50 ` NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 12/24] lustre: discard LTIME_S macro NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 05/24] kbuild: Add documentation for modobj-m NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 03/24] kbuild: support building of per-directory mod.a NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 11/24] lustre: discard current_n*groups macros NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 20/24] lustre: move tcd locking across to tracefile.c NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 02/24] kbuild: treat a directory listed in a composite object as foo/mod.a NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 01/24] kbuild: detect directories in components of a module NeilBrown
2018-06-15 7:11 ` [lustre-devel] [PATCH 18/24] lustre/lnet: move tracefile locking from linux-tracefile.c to tracefile.c NeilBrown
2018-06-21 1:48 ` [lustre-devel] [PATCH 00/24] lustre - more cleanups including module reduction James Simmons
2018-06-21 2:29 ` Patrick Farrell
2018-06-21 2:57 ` James Simmons
2018-06-21 7:22 ` Andreas Dilger
2018-06-21 12:28 ` Patrick Farrell
2018-06-24 20:35 ` James Simmons
2018-06-24 23:40 ` NeilBrown
2018-06-26 1:13 ` James Simmons
2018-06-26 13:51 ` Patrick Farrell
2018-06-27 3:08 ` NeilBrown
2018-06-27 4:00 ` Cory Spitz
2018-06-28 1:26 ` NeilBrown
2018-06-27 11:01 ` Andreas Dilger
2018-06-27 12:06 ` Patrick Farrell
2018-06-28 1:59 ` NeilBrown
2018-06-28 2:35 ` Patrick Farrell
2018-06-28 23:12 ` Andreas Dilger
2018-07-05 23:47 ` James Simmons
2018-07-06 0:01 ` Doug Oucharek
2018-06-28 15:03 ` Cory Spitz
2018-06-28 17:03 ` Doug Oucharek
2018-07-04 17:54 ` Alexey Lyashkov
2018-06-28 1:39 ` NeilBrown
2018-06-21 3:00 ` NeilBrown
2018-06-21 3:42 ` Patrick Farrell
2018-06-24 20:39 ` James Simmons
2018-06-21 2:54 ` NeilBrown
2018-06-24 20:46 ` James Simmons
2018-06-24 23:58 ` NeilBrown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87d0wkdaq0.fsf@notabene.neil.brown.name \
--to=neilb@suse.com \
--cc=lustre-devel@lists.lustre.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox