Re: [patch] strerror.3: Change strerror() reference from MT-Unsafe to MT-Safe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks, Alex,
Attaching the patch (see attachments)

From: Shani Leviim <sleviim@xxxxxxxxxx>
Date: Sun, 30 Jul 2023 15:51:07 +0300
Subject: [PATCH 1/1] strerror.3: Change strerror() reference from MT-Unsafe to
 MT-Safe

The information in this patch was obtained from a glibc upstream patch,
commit ID 28aff047818eb1726394296d27b9c7885340bead

According the patch above, for glibc versions >=2.32,
strerror() is considered MT-Safe, and the man page should be changed
accordingly.

Signed-off-by: Shani Leviim <sleviim@xxxxxxxxxx>
---
 man3/strerror.3 | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/man3/strerror.3 b/man3/strerror.3
index 862e153ee..6a3d83164 100644
--- a/man3/strerror.3
+++ b/man3/strerror.3
@@ -71,11 +71,12 @@ part of the current locale to select the
appropriate language.
 is
 .BR EINVAL ,
 the returned description will be "Invalid argument".)
-This string must not be modified by the application, but may be
-modified by a subsequent call to
+This string must not be modified by the application,
+and the returned pointer will be invalidated on a subsequent call to
 .BR strerror ()
 or
-.BR strerror_l ().
+.BR strerror_l (),
+or if the thread that obtained the string exits.
 No other library function, including
 .BR perror (3),
 will modify this string.
@@ -100,12 +101,12 @@ For example, given
 as an argument, this function returns a pointer to the string "EPERM".
 .\"
 .SS strerror_r()
-The
 .BR strerror_r ()
-function is similar to
+is like
 .BR strerror (),
-but is
-thread safe.
+but might use the supplied buffer
+.I buf
+instead of allocating one internally.
 This function is available in two versions:
 an XSI-compliant version specified in POSIX.1-2001
 (available since glibc 2.3.4, but not POSIX-compliant until glibc 2.13),
@@ -238,7 +239,7 @@ Interface    Attribute    Value
 T{
 .BR strerror ()
 T}    Thread safety    T{
-MT-Unsafe race:strerror
+MT-Safe
 T}
 T{
 .BR strerrorname_np (),
@@ -249,6 +250,10 @@ T{
 .BR strerror_l ()
 T}    Thread safety    MT-Safe
 .TE
+.PP
+Before glibc 2.32,
+.BR strerror ()
+is not MT-Safe.
 .hy
 .ad
 .sp 1
@@ -292,13 +297,6 @@ to
 if the error number is unknown.
 C99 and POSIX.1-2008 require the return value to be non-NULL.
 .SH NOTES
-The GNU C Library uses a buffer of 1024 characters for
-.BR strerror ().
-This buffer size therefore should be sufficient to avoid an
-.B ERANGE
-error when calling
-.BR strerror_r ().
-.PP
 .BR strerrorname_np ()
 and
 .BR strerrordesc_np ()
@@ -309,4 +307,5 @@ are thread-safe and async-signal-safe.
 .BR error (3),
 .BR perror (3),
 .BR strsignal (3),
-.BR locale (7)
+.BR locale (7),
+.BR signal-safety (7)
-- 
2.39.3


Regards,
Shani Leviim


On Fri, Jul 28, 2023 at 9:56 PM Alejandro Colomar <alx@xxxxxxxxxx> wrote:
>
> Hi Shani, Florian,
>
> On 2023-07-16 19:28, Shani Leviim wrote:
> > Hi all,
> > My previous patch wasn't aligned with the master branch.
> > Here's the updated patch (compared to master):
>
> Thanks for the patch.
>
> Florian, do you have any comments about this patch?
>
> >
> > diff --git a/man3/strerror.3 b/man3/strerror.3
> > index 862e153ee..6a3d83164 100644
> > --- a/man3/strerror.3
> > +++ b/man3/strerror.3
> > @@ -71,11 +71,12 @@ part of the current locale to select the
> > appropriate language.
> >  is
> >  .BR EINVAL ,
> >  the returned description will be "Invalid argument".)
> > -This string must not be modified by the application, but may be
> > -modified by a subsequent call to
> > +This string must not be modified by the application,
> > +and the returned pointer will be invalidated on a subsequent call to
> >  .BR strerror ()
> >  or
> > -.BR strerror_l ().
> > +.BR strerror_l (),
> > +or if the thread that obtained the string exits.
> >  No other library function, including
> >  .BR perror (3),
> >  will modify this string.
> > @@ -100,12 +101,12 @@ For example, given
> >  as an argument, this function returns a pointer to the string "EPERM".
> >  .\"
> >  .SS strerror_r()
> > -The
> >  .BR strerror_r ()
> > -function is similar to
> > +is like
> >  .BR strerror (),
> > -but is
> > -thread safe.
> > +but might use the supplied buffer
> > +.I buf
> > +instead of allocating one internally.
> >  This function is available in two versions:
> >  an XSI-compliant version specified in POSIX.1-2001
> >  (available since glibc 2.3.4, but not POSIX-compliant until glibc 2.13),
> > @@ -238,7 +239,7 @@ Interface   Attribute       Value
> >  T{
> >  .BR strerror ()
> >  T}     Thread safety   T{
> > -MT-Unsafe race:strerror
> > +MT-Safe
> >  T}
> >  T{
> >  .BR strerrorname_np (),
> > @@ -249,6 +250,10 @@ T{
> >  .BR strerror_l ()
> >  T}     Thread safety   MT-Safe
> >  .TE
> > +.PP
> > +Before glibc 2.32,
> > +.BR strerror ()
> > +is not MT-Safe.
> >  .hy
> >  .ad
> >  .sp 1
> > @@ -292,13 +297,6 @@ to
> >  if the error number is unknown.
> >  C99 and POSIX.1-2008 require the return value to be non-NULL.
> >  .SH NOTES
> > -The GNU C Library uses a buffer of 1024 characters for
> > -.BR strerror ().
> > -This buffer size therefore should be sufficient to avoid an
> > -.B ERANGE
> > -error when calling
> > -.BR strerror_r ().
> > -.PP
> >  .BR strerrorname_np ()
> >  and
> >  .BR strerrordesc_np ()
> > @@ -309,4 +307,5 @@ are thread-safe and async-signal-safe.
> >  .BR error (3),
> >  .BR perror (3),
> >  .BR strsignal (3),
> > -.BR locale (7)
> > +.BR locale (7),
> > +.BR signal-safety (7)
> >
> >
> > Signed-off-by: Shani Leviim <sleviim@xxxxxxxxxx>
>
> Can you please include that information in the commit message itself?
> I suggest using git-format-patch(1) + git-send-email(1) to send the patch.
> If git-send-email(1) is not an option for you, then I suggest adding a
> copy of the patch as an attachment (but keep the inline copy please).
>
> Check the ./CONTRIBUTING file.
>
> Cheers,
> Alex
>
> >
> > Regards,
> > Shani Leviim
> >
> > On Thu, Jul 13, 2023 at 2:15 PM Shani Leviim <sleviim@xxxxxxxxxx> wrote:
> >>
> >> Thanks, Florian, for reviewing,
> >> My original mail wasn't text plained, sorry for that.
> >>
> >> The information in my patch was obtained from a glibc upstream patch,
> >> commit ID 28aff047818eb1726394296d27b9c7885340bead
> >> Following the patch above, for glibc versions >=2.32, strerror() is
> >> considered MT-Safe, and the man page should be changed accordingly.
> >>
> >> diff --git a/man3/strerror.3 b/man3/strerror.3
> >> index 72b4d3994..31818e4ae 100644
> >> --- a/man3/strerror.3
> >> +++ b/man3/strerror.3
> >> @@ -91,11 +91,12 @@ part of the current locale to select the
> >> appropriate language.
> >>  is
> >>  .BR EINVAL ,
> >>  the returned description will be "Invalid argument".)
> >> -This string must not be modified by the application, but may be
> >> -modified by a subsequent call to
> >> +This string must not be modified by the application,
> >> +and the returned pointer will be invalidated on a subsequent call to
> >>  .BR strerror ()
> >>  or
> >> -.BR strerror_l ().
> >> +.BR strerror_l (),
> >> +or if the thread that obtained the string exits.
> >>  No other library function, including
> >>  .BR perror (3),
> >>  will modify this string.
> >> @@ -120,12 +121,12 @@ For example, given
> >>  as an argument, this function returns a pointer to the string "EPERM".
> >>  .\"
> >>  .SS strerror_r()
> >> -The
> >>  .BR strerror_r ()
> >> -function is similar to
> >> +is like
> >>  .BR strerror (),
> >> -but is
> >> -thread safe.
> >> +but might use the supplied buffer
> >> +.I buf
> >> +instead of allocating one internally.
> >>  This function is available in two versions:
> >>  an XSI-compliant version specified in POSIX.1-2001
> >>  (available since glibc 2.3.4, but not POSIX-compliant until glibc 2.13),
> >> @@ -249,7 +250,7 @@ l l l.
> >>  Interface      Attribute       Value
> >>  T{
> >>  .BR strerror ()
> >> -T}     Thread safety   MT-Unsafe race:strerror
> >> +T}     Thread safety   MT-Safe
> >>  T{
> >>  .BR strerrorname_np (),
> >>  .BR strerrordesc_np ()
> >> @@ -260,6 +261,10 @@ T{
> >>  .BR strerror_l ()
> >>  T}     Thread safety   MT-Safe
> >>  .TE
> >> +.PP
> >> +Before glibc 2.32,
> >> +.BR strerror ()
> >> +is not MT-Safe.
> >>  .SH CONFORMING TO
> >>  .BR strerror ()
> >>  is specified by POSIX.1-2001, POSIX.1-2008, C89, and C99.
> >> @@ -300,13 +305,6 @@ to
> >>  if the error number is unknown.
> >>  C99 and POSIX.1-2008 require the return value to be non-NULL.
> >>  .SH NOTES
> >> -The GNU C Library uses a buffer of 1024 characters for
> >> -.BR strerror ().
> >> -This buffer size therefore should be sufficient to avoid an
> >> -.B ERANGE
> >> -error when calling
> >> -.BR strerror_r ().
> >> -.PP
> >>  .BR strerrorname_np ()
> >>  and
> >>  .BR strerrordesc_np ()
> >> @@ -317,4 +315,5 @@ are thread-safe and async-signal-safe.
> >>  .BR error (3),
> >>  .BR perror (3),
> >>  .BR strsignal (3),
> >> -.BR locale (7)
> >> +.BR locale (7),
> >> +.BR signal-safety (7)
> >>
> >> Signed-off-by: Shani Leviim <sleviim@xxxxxxxxxx>
> >>
> >> Regards,
> >> Shani Leviim
> >>
> >> Regards,
> >> Shani Leviim
> >>
> >>
> >> On Thu, Jul 13, 2023 at 11:12 AM Florian Weimer <fweimer@xxxxxxxxxx> wrote:
> >>>
> >>> * Shani Leviim:
> >>>
> >>>> @@ -169,6 +172,16 @@ is too small and
> >>>>  is unknown).
> >>>>  The string always includes a terminating null byte (\(aq\e0\(aq).
> >>>>  .\"
> >>>> +.PP
> >>>> +The automatically generated buffer for
> >>>> +.BR strerror ()
> >>>> +and
> >>>> +.BR strerror_l ()
> >>>> +is sufficient to avoid an
> >>>> +.B ERANGE
> >>>> +error when calling
> >>>> +.BR strerror_r ().
> >>>> +.PP
> >>>
> >>> I think this gives the wrong impression that the pointer returned by
> >>> strerror/strerror_l can be used with strerror_r.  This is not the case
> >>> because the application does not own that buffer, or know its length.
> >>>
> >>> Thanks,
> >>> Florian
> >>>
> >
>
> --
> <http://www.alejandro-colomar.es/>
> GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5
>
From 387522bc37d492bfa8aa094b99c6d5f1131e3a4b Mon Sep 17 00:00:00 2001
From: Shani Leviim <sleviim@xxxxxxxxxx>
Date: Sun, 30 Jul 2023 15:51:07 +0300
Subject: [PATCH 1/1] strerror.3: Change strerror() reference from MT-Unsafe to
 MT-Safe

The information in this patch was obtained from a glibc upstream patch,
commit ID 28aff047818eb1726394296d27b9c7885340bead

According the patch above, for glibc versions >=2.32,
strerror() is considered MT-Safe, and the man page should be changed accordingly.

Signed-off-by: Shani Leviim <sleviim@xxxxxxxxxx>
---
 man3/strerror.3 | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/man3/strerror.3 b/man3/strerror.3
index 862e153ee..6a3d83164 100644
--- a/man3/strerror.3
+++ b/man3/strerror.3
@@ -71,11 +71,12 @@ part of the current locale to select the appropriate language.
 is
 .BR EINVAL ,
 the returned description will be "Invalid argument".)
-This string must not be modified by the application, but may be
-modified by a subsequent call to
+This string must not be modified by the application,
+and the returned pointer will be invalidated on a subsequent call to
 .BR strerror ()
 or
-.BR strerror_l ().
+.BR strerror_l (),
+or if the thread that obtained the string exits.
 No other library function, including
 .BR perror (3),
 will modify this string.
@@ -100,12 +101,12 @@ For example, given
 as an argument, this function returns a pointer to the string "EPERM".
 .\"
 .SS strerror_r()
-The
 .BR strerror_r ()
-function is similar to
+is like
 .BR strerror (),
-but is
-thread safe.
+but might use the supplied buffer
+.I buf
+instead of allocating one internally.
 This function is available in two versions:
 an XSI-compliant version specified in POSIX.1-2001
 (available since glibc 2.3.4, but not POSIX-compliant until glibc 2.13),
@@ -238,7 +239,7 @@ Interface	Attribute	Value
 T{
 .BR strerror ()
 T}	Thread safety	T{
-MT-Unsafe race:strerror
+MT-Safe
 T}
 T{
 .BR strerrorname_np (),
@@ -249,6 +250,10 @@ T{
 .BR strerror_l ()
 T}	Thread safety	MT-Safe
 .TE
+.PP
+Before glibc 2.32,
+.BR strerror ()
+is not MT-Safe.
 .hy
 .ad
 .sp 1
@@ -292,13 +297,6 @@ to
 if the error number is unknown.
 C99 and POSIX.1-2008 require the return value to be non-NULL.
 .SH NOTES
-The GNU C Library uses a buffer of 1024 characters for
-.BR strerror ().
-This buffer size therefore should be sufficient to avoid an
-.B ERANGE
-error when calling
-.BR strerror_r ().
-.PP
 .BR strerrorname_np ()
 and
 .BR strerrordesc_np ()
@@ -309,4 +307,5 @@ are thread-safe and async-signal-safe.
 .BR error (3),
 .BR perror (3),
 .BR strsignal (3),
-.BR locale (7)
+.BR locale (7),
+.BR signal-safety (7)
-- 
2.39.3


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux