Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1362729
| From | Julia Lawall <julia.lawall@lip6.fr> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v6 4/8] debugfs, coccinelle: check for obsolete DEFINE_SIMPLE_ATTRIBUTE() usage |
| Date | 2016-03-22 14:20 +0100 |
| Message-ID | <rfuo3-4SV-29@gated-at.bofh.it> (permalink) |
| References | <rfuo1-4SV-3@gated-at.bofh.it> <rfuo3-4SV-27@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Tue, 22 Mar 2016, Nicolai Stange wrote: > In order to protect against file removal races, debugfs files created via > debugfs_create_file() now get wrapped by a struct file_operations at their > opening. > > If the original struct file_operations are known to be safe against removal > races by themselves already, the proxy creation may be bypassed by creating > the files through debugfs_create_file_unsafe(). > > In order to help debugfs users who use the common > DEFINE_SIMPLE_ATTRIBUTE() + debugfs_create_file() > idiom to transition to removal safe struct file_operations, the helper > macro DEFINE_DEBUGFS_ATTRIBUTE() has been introduced. > > Thus, the preferred strategy is to use > DEFINE_DEBUGFS_ATTRIBUTE() + debugfs_create_file_unsafe() > now. > > Introduce a Coccinelle script that searches for > DEFINE_SIMPLE_ATTRIBUTE()-defined struct file_operations handed into > debugfs_create_file(). Suggest to turn these usages into the > DEFINE_DEBUGFS_ATTRIBUTE() + debugfs_create_file_unsafe() > pattern. > > Signed-off-by: Nicolai Stange <nicstange@gmail.com> In terms of the structure of the semantic patch: Acked-by: Julia Lawall <Julia.Lawall@lip6.fr> > --- > .../api/debugfs/debugfs_simple_attr.cocci | 67 ++++++++++++++++++++++ > 1 file changed, 67 insertions(+) > create mode 100644 scripts/coccinelle/api/debugfs/debugfs_simple_attr.cocci > > diff --git a/scripts/coccinelle/api/debugfs/debugfs_simple_attr.cocci b/scripts/coccinelle/api/debugfs/debugfs_simple_attr.cocci > new file mode 100644 > index 0000000..85cf540 > --- /dev/null > +++ b/scripts/coccinelle/api/debugfs/debugfs_simple_attr.cocci > @@ -0,0 +1,67 @@ > +/// Use DEFINE_DEBUGFS_ATTRIBUTE rather than DEFINE_SIMPLE_ATTRIBUTE > +/// for debugfs files. > +/// > +//# Rationale: DEFINE_SIMPLE_ATTRIBUTE + debugfs_create_file() > +//# imposes some significant overhead as compared to > +//# DEFINE_DEBUGFS_ATTRIBUTE + debugfs_create_file_unsafe(). > +// > +// Copyright (C): 2016 Nicolai Stange > +// Options: --no-includes > +// > + > +virtual context > +virtual patch > +virtual org > +virtual report > + > +@dsa@ > +declarer name DEFINE_SIMPLE_ATTRIBUTE; > +identifier dsa_fops; > +expression dsa_get, dsa_set, dsa_fmt; > +position p; > +@@ > +DEFINE_SIMPLE_ATTRIBUTE@p(dsa_fops, dsa_get, dsa_set, dsa_fmt); > + > +@dcf@ > +expression name, mode, parent, data; > +identifier dsa.dsa_fops; > +@@ > +debugfs_create_file(name, mode, parent, data, &dsa_fops) > + > + > +@context_dsa depends on context && dcf@ > +declarer name DEFINE_DEBUGFS_ATTRIBUTE; > +identifier dsa.dsa_fops; > +expression dsa.dsa_get, dsa.dsa_set, dsa.dsa_fmt; > +@@ > +* DEFINE_SIMPLE_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt); > + > + > +@patch_dcf depends on patch expression@ > +expression name, mode, parent, data; > +identifier dsa.dsa_fops; > +@@ > +- debugfs_create_file(name, mode, parent, data, &dsa_fops) > ++ debugfs_create_file_unsafe(name, mode, parent, data, &dsa_fops) > + > +@patch_dsa depends on patch_dcf && patch@ > +identifier dsa.dsa_fops; > +expression dsa.dsa_get, dsa.dsa_set, dsa.dsa_fmt; > +@@ > +- DEFINE_SIMPLE_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt); > ++ DEFINE_DEBUGFS_ATTRIBUTE(dsa_fops, dsa_get, dsa_set, dsa_fmt); > + > + > +@script:python depends on org && dcf@ > +fops << dsa.dsa_fops; > +p << dsa.p; > +@@ > +msg="%s should be defined with DEFINE_DEBUGFS_ATTRIBUTE" % (fops) > +coccilib.org.print_todo(p[0], msg) > + > +@script:python depends on report && dcf@ > +fops << dsa.dsa_fops; > +p << dsa.p; > +@@ > +msg="WARNING: %s should be defined with DEFINE_DEBUGFS_ATTRIBUTE" % (fops) > +coccilib.report.print_report(p[0], msg) > -- > 2.7.4 > >
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v6 0/8] fix debugfs file removal races Nicolai Stange <nicstange@gmail.com> - 2016-03-22 14:20 +0100
[PATCH v6 4/8] debugfs, coccinelle: check for obsolete DEFINE_SIMPLE_ATTRIBUTE() usage Nicolai Stange <nicstange@gmail.com> - 2016-03-22 14:20 +0100
Re: [PATCH v6 4/8] debugfs, coccinelle: check for obsolete DEFINE_SIMPLE_ATTRIBUTE() usage Julia Lawall <julia.lawall@lip6.fr> - 2016-03-22 14:20 +0100
[PATCH v6 3/8] debugfs: add support for self-protecting attribute file fops Nicolai Stange <nicstange@gmail.com> - 2016-03-22 14:20 +0100
[PATCH v6 8/8] debugfs: unproxify files created through debugfs_create_u32_array() Nicolai Stange <nicstange@gmail.com> - 2016-03-22 14:20 +0100
[PATCH v6 2/8] debugfs: prevent access to removed files' private data Nicolai Stange <nicstange@gmail.com> - 2016-03-22 14:20 +0100
[PATCH v6 6/8] debugfs: unproxify files created through debugfs_create_bool() Nicolai Stange <nicstange@gmail.com> - 2016-03-22 14:20 +0100
csiph-web