* [GIT PULL] oprofile fixes for 3.2
@ 2011-12-19 13:46 Robert Richter
2011-12-19 13:46 ` [PATCH] oprofile: Fix uninitialized memory access when writing to oprofilefs Robert Richter
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Robert Richter @ 2011-12-19 13:46 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, oprofile-list, Robert Richter
Ingo,
please pull this one fix for 3.2.
Thanks,
-Robert
The following changes since commit dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50:
Linux 3.2-rc5 (2011-12-09 15:09:32 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile.git urgent
Robert Richter (1):
oprofile: Fix uninitialized memory access when writing to oprofilefs
arch/s390/oprofile/init.c | 3 +++
drivers/oprofile/oprofile_files.c | 9 +++++++++
drivers/oprofile/oprofilefs.c | 15 ++++++++++++++-
3 files changed, 26 insertions(+), 1 deletions(-)
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] oprofile: Fix uninitialized memory access when writing to oprofilefs
2011-12-19 13:46 [GIT PULL] oprofile fixes for 3.2 Robert Richter
@ 2011-12-19 13:46 ` Robert Richter
2011-12-19 14:00 ` [GIT PULL] oprofile fixes for 3.2 Ingo Molnar
2011-12-22 15:15 ` [PATCH] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue Robert Richter
2 siblings, 0 replies; 9+ messages in thread
From: Robert Richter @ 2011-12-19 13:46 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, oprofile-list, Robert Richter, Andrew Morton, stable
If oprofilefs_ulong_from_user() is called with count equals zero, *val
must be initialized. Otherwise *val is later used uninitialized as no
error is returned. Alternatively oprofilefs_ulong_from_user() may not
be called if !count. This patch fixes usage of oprofilefs_ulong_from_
user().
This follows write syscall implementation when count is zero: "If
count is zero ... [and if] no errors are detected, 0 will be returned
without causing any other effect." (man 2 write)
Reported-By: Mike Waychison <mikew@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: stable@vger.kernel.org
Signed-off-by: Robert Richter <robert.richter@amd.com>
---
arch/s390/oprofile/init.c | 3 +++
drivers/oprofile/oprofile_files.c | 9 +++++++++
drivers/oprofile/oprofilefs.c | 15 ++++++++++++++-
3 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/arch/s390/oprofile/init.c b/arch/s390/oprofile/init.c
index 6efc18b..5d605f1 100644
--- a/arch/s390/oprofile/init.c
+++ b/arch/s390/oprofile/init.c
@@ -87,6 +87,9 @@ static ssize_t hwsampler_write(struct file *file, char const __user *buf,
if (*offset)
return -EINVAL;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
diff --git a/drivers/oprofile/oprofile_files.c b/drivers/oprofile/oprofile_files.c
index 89f6345..8265b41 100644
--- a/drivers/oprofile/oprofile_files.c
+++ b/drivers/oprofile/oprofile_files.c
@@ -44,6 +44,9 @@ static ssize_t timeout_write(struct file *file, char const __user *buf,
if (*offset)
return -EINVAL;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
@@ -83,6 +86,9 @@ static ssize_t depth_write(struct file *file, char const __user *buf, size_t cou
if (!oprofile_ops.backtrace)
return -EINVAL;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
@@ -140,6 +146,9 @@ static ssize_t enable_write(struct file *file, char const __user *buf, size_t co
if (*offset)
return -EINVAL;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
index d0de6cc..1caf1b0 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
@@ -59,7 +59,17 @@ ssize_t oprofilefs_ulong_to_user(unsigned long val, char __user *buf, size_t cou
return simple_read_from_buffer(buf, count, offset, tmpbuf, maxlen);
}
-
+/*
+ * Note: oprofilefs_ulong_from_user() must be called with *val
+ * initialized, otherwise *val is used uninitialized if !count. This
+ * follows write syscall implementation when count is zero: "If count
+ * is zero ... [and if] no errors are detected, 0 will be returned
+ * without causing any other effect." (man 2 write)
+ *
+ * In case *val is a temporary variable, oprofilefs_ulong_from_user()
+ * may not be called if !count. This causes race conditions due to
+ * missing locking of *var.
+ */
int oprofilefs_ulong_from_user(unsigned long *val, char const __user *buf, size_t count)
{
char tmpbuf[TMPBUFSIZE];
@@ -98,6 +108,9 @@ static ssize_t ulong_write_file(struct file *file, char const __user *buf, size_
if (*offset)
return -EINVAL;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&value, buf, count);
if (retval)
return retval;
--
1.7.7
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [GIT PULL] oprofile fixes for 3.2
2011-12-19 13:46 [GIT PULL] oprofile fixes for 3.2 Robert Richter
2011-12-19 13:46 ` [PATCH] oprofile: Fix uninitialized memory access when writing to oprofilefs Robert Richter
@ 2011-12-19 14:00 ` Ingo Molnar
2011-12-19 14:17 ` Robert Richter
2011-12-22 15:15 ` [PATCH] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue Robert Richter
2 siblings, 1 reply; 9+ messages in thread
From: Ingo Molnar @ 2011-12-19 14:00 UTC (permalink / raw)
To: Robert Richter; +Cc: LKML, oprofile-list
* Robert Richter <robert.richter@amd.com> wrote:
> Ingo,
>
> please pull this one fix for 3.2.
>
> Thanks,
>
> -Robert
>
>
>
> The following changes since commit dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50:
>
> Linux 3.2-rc5 (2011-12-09 15:09:32 -0800)
>
> are available in the git repository at:
> git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile.git urgent
>
> Robert Richter (1):
> oprofile: Fix uninitialized memory access when writing to oprofilefs
>
> arch/s390/oprofile/init.c | 3 +++
> drivers/oprofile/oprofile_files.c | 9 +++++++++
> drivers/oprofile/oprofilefs.c | 15 ++++++++++++++-
> 3 files changed, 26 insertions(+), 1 deletions(-)
Hm, i really don't like this:
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&val, buf, count);
if (retval)
return retval;
+ if (!count)
+ return 0;
+
retval = oprofilefs_ulong_from_user(&value, buf, count);
if (retval)
return retval;
See the ugly and fragile pattern?
This should *really* be solved via the
oprofilefs_ulong_from_user() helper function, not by sprinkling
the !count checks in half a dozen places ...
Thanks,
Ingo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [GIT PULL] oprofile fixes for 3.2
2011-12-19 14:00 ` [GIT PULL] oprofile fixes for 3.2 Ingo Molnar
@ 2011-12-19 14:17 ` Robert Richter
2011-12-19 15:38 ` [PATCH v2] oprofile: Fix uninitialized memory access when writing to Robert Richter
0 siblings, 1 reply; 9+ messages in thread
From: Robert Richter @ 2011-12-19 14:17 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, oprofile-list
On 19.12.11 15:00:49, Ingo Molnar wrote:
> + if (!count)
> + return 0;
> +
> retval = oprofilefs_ulong_from_user(&value, buf, count);
> if (retval)
> return retval;
>
> See the ugly and fragile pattern?
>
> This should *really* be solved via the
> oprofilefs_ulong_from_user() helper function, not by sprinkling
> the !count checks in half a dozen places ...
Hmm, I thought there was no way to leave the code path with count == 0
and retval. But thinking about it it would be possible with returning
count or errors < 0. Will improve the patch.
Thanks,
-Robert
--
Advanced Micro Devices, Inc.
Operating System Research Center
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2] oprofile: Fix uninitialized memory access when writing to
2011-12-19 14:17 ` Robert Richter
@ 2011-12-19 15:38 ` Robert Richter
2011-12-19 16:19 ` Ingo Molnar
2011-12-20 8:57 ` [tip:perf/urgent] oprofile: Fix uninitialized memory access when writing to writing to oprofilefs tip-bot for Robert Richter
0 siblings, 2 replies; 9+ messages in thread
From: Robert Richter @ 2011-12-19 15:38 UTC (permalink / raw)
To: Ingo Molnar; +Cc: LKML, oprofile-list
On 19.12.11 15:17:03, Robert Richter wrote:
> On 19.12.11 15:00:49, Ingo Molnar wrote:
>
> > + if (!count)
> > + return 0;
> > +
> > retval = oprofilefs_ulong_from_user(&value, buf, count);
> > if (retval)
> > return retval;
> >
> > See the ugly and fragile pattern?
> >
> > This should *really* be solved via the
> > oprofilefs_ulong_from_user() helper function, not by sprinkling
> > the !count checks in half a dozen places ...
>
> Hmm, I thought there was no way to leave the code path with count == 0
> and retval. But thinking about it it would be possible with returning
> count or errors < 0. Will improve the patch.
Ingo, see my updated version below. I am fine with appling it directly
on tip/perf/urgent.
Thanks,
-Robert
--
>From f07214bc05560f63da8404d31aa83034a16c6229 Mon Sep 17 00:00:00 2001
From: Robert Richter <robert.richter@amd.com>
Date: Fri, 16 Dec 2011 15:45:31 +0100
Subject: [PATCH] oprofile: Fix uninitialized memory access when writing to
oprofilefs
If oprofilefs_ulong_from_user() is called with count equals zero, *val
remains unchanged. Depending on the implementation it might be
uninitialized.
Change oprofilefs_ulong_from_user()'s interface to return count on
success. Thus, we are able to return early if count equals zero which
avoids using *val uninitialized. Fixing all users of oprofilefs_ulong_
from_user().
This follows write syscall implementation when count is zero: "If
count is zero ... [and if] no errors are detected, 0 will be returned
without causing any other effect." (man 2 write)
Reported-By: Mike Waychison <mikew@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: stable@vger.kernel.org
Signed-off-by: Robert Richter <robert.richter@amd.com>
---
arch/s390/oprofile/init.c | 2 +-
drivers/oprofile/oprofile_files.c | 7 ++++---
drivers/oprofile/oprofilefs.c | 11 +++++++++--
3 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/arch/s390/oprofile/init.c b/arch/s390/oprofile/init.c
index 6efc18b..bd58b72 100644
--- a/arch/s390/oprofile/init.c
+++ b/arch/s390/oprofile/init.c
@@ -88,7 +88,7 @@ static ssize_t hwsampler_write(struct file *file, char const __user *buf,
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
if (oprofile_started)
diff --git a/drivers/oprofile/oprofile_files.c b/drivers/oprofile/oprofile_files.c
index 89f6345..84a208d 100644
--- a/drivers/oprofile/oprofile_files.c
+++ b/drivers/oprofile/oprofile_files.c
@@ -45,7 +45,7 @@ static ssize_t timeout_write(struct file *file, char const __user *buf,
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
retval = oprofile_set_timeout(val);
@@ -84,7 +84,7 @@ static ssize_t depth_write(struct file *file, char const __user *buf, size_t cou
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
retval = oprofile_set_ulong(&oprofile_backtrace_depth, val);
@@ -141,9 +141,10 @@ static ssize_t enable_write(struct file *file, char const __user *buf, size_t co
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
+ retval = 0;
if (val)
retval = oprofile_start();
else
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
index d0de6cc..2f0aa0f 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
@@ -60,6 +60,13 @@ ssize_t oprofilefs_ulong_to_user(unsigned long val, char __user *buf, size_t cou
}
+/*
+ * Note: If oprofilefs_ulong_from_user() returns 0, then *val remains
+ * unchanged and might be uninitialized. This follows write syscall
+ * implementation when count is zero: "If count is zero ... [and if]
+ * no errors are detected, 0 will be returned without causing any
+ * other effect." (man 2 write)
+ */
int oprofilefs_ulong_from_user(unsigned long *val, char const __user *buf, size_t count)
{
char tmpbuf[TMPBUFSIZE];
@@ -79,7 +86,7 @@ int oprofilefs_ulong_from_user(unsigned long *val, char const __user *buf, size_
raw_spin_lock_irqsave(&oprofilefs_lock, flags);
*val = simple_strtoul(tmpbuf, NULL, 0);
raw_spin_unlock_irqrestore(&oprofilefs_lock, flags);
- return 0;
+ return count;
}
@@ -99,7 +106,7 @@ static ssize_t ulong_write_file(struct file *file, char const __user *buf, size_
return -EINVAL;
retval = oprofilefs_ulong_from_user(&value, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
retval = oprofile_set_ulong(file->private_data, value);
--
1.7.7
--
Advanced Micro Devices, Inc.
Operating System Research Center
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2] oprofile: Fix uninitialized memory access when writing to
2011-12-19 15:38 ` [PATCH v2] oprofile: Fix uninitialized memory access when writing to Robert Richter
@ 2011-12-19 16:19 ` Ingo Molnar
2011-12-20 8:57 ` [tip:perf/urgent] oprofile: Fix uninitialized memory access when writing to writing to oprofilefs tip-bot for Robert Richter
1 sibling, 0 replies; 9+ messages in thread
From: Ingo Molnar @ 2011-12-19 16:19 UTC (permalink / raw)
To: Robert Richter; +Cc: LKML, oprofile-list
* Robert Richter <robert.richter@amd.com> wrote:
> On 19.12.11 15:17:03, Robert Richter wrote:
> > On 19.12.11 15:00:49, Ingo Molnar wrote:
> >
> > > + if (!count)
> > > + return 0;
> > > +
> > > retval = oprofilefs_ulong_from_user(&value, buf, count);
> > > if (retval)
> > > return retval;
> > >
> > > See the ugly and fragile pattern?
> > >
> > > This should *really* be solved via the
> > > oprofilefs_ulong_from_user() helper function, not by sprinkling
> > > the !count checks in half a dozen places ...
> >
> > Hmm, I thought there was no way to leave the code path with count == 0
> > and retval. But thinking about it it would be possible with returning
> > count or errors < 0. Will improve the patch.
>
> Ingo, see my updated version below. [...]
Yeah, this looks a lot cleaner.
> [...] I am fine with appling it directly on tip/perf/urgent.
Applied,
Thanks,
Ingo
^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip:perf/urgent] oprofile: Fix uninitialized memory access when writing to writing to oprofilefs
2011-12-19 15:38 ` [PATCH v2] oprofile: Fix uninitialized memory access when writing to Robert Richter
2011-12-19 16:19 ` Ingo Molnar
@ 2011-12-20 8:57 ` tip-bot for Robert Richter
1 sibling, 0 replies; 9+ messages in thread
From: tip-bot for Robert Richter @ 2011-12-20 8:57 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, stable, robert.richter, oprofile-list,
akpm, tglx, mikew, mingo
Commit-ID: 913050b91eb94f194392dd797b1ff3779f606ac0
Gitweb: http://git.kernel.org/tip/913050b91eb94f194392dd797b1ff3779f606ac0
Author: Robert Richter <robert.richter@amd.com>
AuthorDate: Mon, 19 Dec 2011 16:38:30 +0100
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Mon, 19 Dec 2011 17:18:43 +0100
oprofile: Fix uninitialized memory access when writing to writing to oprofilefs
If oprofilefs_ulong_from_user() is called with count equals
zero, *val remains unchanged. Depending on the implementation it
might be uninitialized.
Change oprofilefs_ulong_from_user()'s interface to return count
on success. Thus, we are able to return early if count equals
zero which avoids using *val uninitialized. Fixing all users of
oprofilefs_ulong_ from_user().
This follows write syscall implementation when count is zero:
"If count is zero ... [and if] no errors are detected, 0 will be
returned without causing any other effect." (man 2 write)
Reported-By: Mike Waychison <mikew@google.com>
Signed-off-by: Robert Richter <robert.richter@amd.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: <stable@vger.kernel.org>
Cc: oprofile-list <oprofile-list@lists.sourceforge.net>
Link: http://lkml.kernel.org/r/20111219153830.GH16765@erda.amd.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/s390/oprofile/init.c | 2 +-
drivers/oprofile/oprofile_files.c | 7 ++++---
drivers/oprofile/oprofilefs.c | 11 +++++++++--
3 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/arch/s390/oprofile/init.c b/arch/s390/oprofile/init.c
index 6efc18b..bd58b72 100644
--- a/arch/s390/oprofile/init.c
+++ b/arch/s390/oprofile/init.c
@@ -88,7 +88,7 @@ static ssize_t hwsampler_write(struct file *file, char const __user *buf,
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
if (oprofile_started)
diff --git a/drivers/oprofile/oprofile_files.c b/drivers/oprofile/oprofile_files.c
index 89f6345..84a208d 100644
--- a/drivers/oprofile/oprofile_files.c
+++ b/drivers/oprofile/oprofile_files.c
@@ -45,7 +45,7 @@ static ssize_t timeout_write(struct file *file, char const __user *buf,
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
retval = oprofile_set_timeout(val);
@@ -84,7 +84,7 @@ static ssize_t depth_write(struct file *file, char const __user *buf, size_t cou
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
retval = oprofile_set_ulong(&oprofile_backtrace_depth, val);
@@ -141,9 +141,10 @@ static ssize_t enable_write(struct file *file, char const __user *buf, size_t co
return -EINVAL;
retval = oprofilefs_ulong_from_user(&val, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
+ retval = 0;
if (val)
retval = oprofile_start();
else
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c
index d0de6cc..2f0aa0f 100644
--- a/drivers/oprofile/oprofilefs.c
+++ b/drivers/oprofile/oprofilefs.c
@@ -60,6 +60,13 @@ ssize_t oprofilefs_ulong_to_user(unsigned long val, char __user *buf, size_t cou
}
+/*
+ * Note: If oprofilefs_ulong_from_user() returns 0, then *val remains
+ * unchanged and might be uninitialized. This follows write syscall
+ * implementation when count is zero: "If count is zero ... [and if]
+ * no errors are detected, 0 will be returned without causing any
+ * other effect." (man 2 write)
+ */
int oprofilefs_ulong_from_user(unsigned long *val, char const __user *buf, size_t count)
{
char tmpbuf[TMPBUFSIZE];
@@ -79,7 +86,7 @@ int oprofilefs_ulong_from_user(unsigned long *val, char const __user *buf, size_
raw_spin_lock_irqsave(&oprofilefs_lock, flags);
*val = simple_strtoul(tmpbuf, NULL, 0);
raw_spin_unlock_irqrestore(&oprofilefs_lock, flags);
- return 0;
+ return count;
}
@@ -99,7 +106,7 @@ static ssize_t ulong_write_file(struct file *file, char const __user *buf, size_
return -EINVAL;
retval = oprofilefs_ulong_from_user(&value, buf, count);
- if (retval)
+ if (retval <= 0)
return retval;
retval = oprofile_set_ulong(file->private_data, value);
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue
2011-12-19 13:46 [GIT PULL] oprofile fixes for 3.2 Robert Richter
2011-12-19 13:46 ` [PATCH] oprofile: Fix uninitialized memory access when writing to oprofilefs Robert Richter
2011-12-19 14:00 ` [GIT PULL] oprofile fixes for 3.2 Ingo Molnar
@ 2011-12-22 15:15 ` Robert Richter
2011-12-23 13:19 ` [tip:perf/urgent] " tip-bot for Vladimir Zapolskiy
2 siblings, 1 reply; 9+ messages in thread
From: Robert Richter @ 2011-12-22 15:15 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Vladimir Zapolskiy, Will Deacon, LKML, oprofile-list, stable
On 19.12.11 14:46:12, Robert Richter wrote:
> please pull this one fix for 3.2.
Ingo, yet another fix. Please apply to tip/perf/urgent.
Thanks,
-Robert
>From a5ea1e51bb66c6081d081cd88d787f248e07d6af Mon Sep 17 00:00:00 2001
From: Vladimir Zapolskiy <vladimir.zapolskiy@nokia.com>
Date: Thu, 22 Dec 2011 15:36:56 +0200
Subject: [PATCH] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue
This change fixes a linking problem, which happens if oprofile is selected to
be compiled as built-in:
`oprofile_arch_exit' referenced in section `.init.text' of
arch/arm/oprofile/built-in.o: defined in discarded section
`.exit.text' of arch/arm/oprofile/built-in.o
The problem is appeared after commit 87121ca504, which introduced
oprofile_arch_exit() calls from __init function. Note that the aforementioned
commit has been backported to stable branches, and the problem is known to be
reproduced at least with 3.0.13 and 3.1.5 kernels.
Cc: stable@kernel.org # 3.0+
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@nokia.com>
Signed-off-by: Robert Richter <robert.richter@amd.com>
---
arch/arm/oprofile/common.c | 2 +-
arch/sh/oprofile/common.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
index c074e66..4e0a371 100644
--- a/arch/arm/oprofile/common.c
+++ b/arch/arm/oprofile/common.c
@@ -116,7 +116,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
return oprofile_perf_init(ops);
}
-void __exit oprofile_arch_exit(void)
+void oprofile_arch_exit(void)
{
oprofile_perf_exit();
}
diff --git a/arch/sh/oprofile/common.c b/arch/sh/oprofile/common.c
index b4c2d2b..e4dd5d5 100644
--- a/arch/sh/oprofile/common.c
+++ b/arch/sh/oprofile/common.c
@@ -49,7 +49,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
return oprofile_perf_init(ops);
}
-void __exit oprofile_arch_exit(void)
+void oprofile_arch_exit(void)
{
oprofile_perf_exit();
kfree(sh_pmu_op_name);
@@ -60,5 +60,5 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
ops->backtrace = sh_backtrace;
return -ENODEV;
}
-void __exit oprofile_arch_exit(void) {}
+void oprofile_arch_exit(void) {}
#endif /* CONFIG_HW_PERF_EVENTS */
--
1.7.8
--
Advanced Micro Devices, Inc.
Operating System Research Center
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [tip:perf/urgent] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue
2011-12-22 15:15 ` [PATCH] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue Robert Richter
@ 2011-12-23 13:19 ` tip-bot for Vladimir Zapolskiy
0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Vladimir Zapolskiy @ 2011-12-23 13:19 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, vladimir.zapolskiy, will.deacon,
robert.richter, oprofile-list, stable, tglx, mingo
Commit-ID: 55205c916e179e09773d98d290334d319f45ac6b
Gitweb: http://git.kernel.org/tip/55205c916e179e09773d98d290334d319f45ac6b
Author: Vladimir Zapolskiy <vladimir.zapolskiy@nokia.com>
AuthorDate: Thu, 22 Dec 2011 16:15:40 +0100
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Fri, 23 Dec 2011 11:58:34 +0100
oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue
This change fixes a linking problem, which happens if oprofile
is selected to be compiled as built-in:
`oprofile_arch_exit' referenced in section `.init.text' of
arch/arm/oprofile/built-in.o: defined in discarded section
`.exit.text' of arch/arm/oprofile/built-in.o
The problem is appeared after commit 87121ca504, which
introduced oprofile_arch_exit() calls from __init function. Note
that the aforementioned commit has been backported to stable
branches, and the problem is known to be reproduced at least
with 3.0.13 and 3.1.5 kernels.
Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@nokia.com>
Signed-off-by: Robert Richter <robert.richter@amd.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: oprofile-list <oprofile-list@lists.sourceforge.net>
Cc: <stable@kernel.org>
Link: http://lkml.kernel.org/r/20111222151540.GB16765@erda.amd.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/arm/oprofile/common.c | 2 +-
arch/sh/oprofile/common.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
index c074e66..4e0a371 100644
--- a/arch/arm/oprofile/common.c
+++ b/arch/arm/oprofile/common.c
@@ -116,7 +116,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
return oprofile_perf_init(ops);
}
-void __exit oprofile_arch_exit(void)
+void oprofile_arch_exit(void)
{
oprofile_perf_exit();
}
diff --git a/arch/sh/oprofile/common.c b/arch/sh/oprofile/common.c
index b4c2d2b..e4dd5d5 100644
--- a/arch/sh/oprofile/common.c
+++ b/arch/sh/oprofile/common.c
@@ -49,7 +49,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
return oprofile_perf_init(ops);
}
-void __exit oprofile_arch_exit(void)
+void oprofile_arch_exit(void)
{
oprofile_perf_exit();
kfree(sh_pmu_op_name);
@@ -60,5 +60,5 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
ops->backtrace = sh_backtrace;
return -ENODEV;
}
-void __exit oprofile_arch_exit(void) {}
+void oprofile_arch_exit(void) {}
#endif /* CONFIG_HW_PERF_EVENTS */
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-12-23 13:19 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-19 13:46 [GIT PULL] oprofile fixes for 3.2 Robert Richter
2011-12-19 13:46 ` [PATCH] oprofile: Fix uninitialized memory access when writing to oprofilefs Robert Richter
2011-12-19 14:00 ` [GIT PULL] oprofile fixes for 3.2 Ingo Molnar
2011-12-19 14:17 ` Robert Richter
2011-12-19 15:38 ` [PATCH v2] oprofile: Fix uninitialized memory access when writing to Robert Richter
2011-12-19 16:19 ` Ingo Molnar
2011-12-20 8:57 ` [tip:perf/urgent] oprofile: Fix uninitialized memory access when writing to writing to oprofilefs tip-bot for Robert Richter
2011-12-22 15:15 ` [PATCH] oprofile, arm/sh: Fix oprofile_arch_exit() linkage issue Robert Richter
2011-12-23 13:19 ` [tip:perf/urgent] " tip-bot for Vladimir Zapolskiy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).