<div dir="auto">This needs a ticket now to apply to 5, and we'll want to apply to 6 also. Can you open a ticket and post a patch for 5.1?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jun 25, 2020, 5:49 PM Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com">kinsey.moore@oarcorp.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hey Gedare,<br>
Setting obj_err to 0 would get the desired outcome, but the logic as it exists now is faulty. Setting obj_err to a value that can't be produced by _POSIX_Shm_Get_by_name would be a better option, but it would still be checking an error value after successful execution. _POSIX_Shm_Get_by_name relies on _Objects_Get_by_name internally which states about obj_err: The error indication in case of failure. If _POSIX_Shm_Get_by_name returns OBJECTS_GET_BY_NAME_NO_OBJECT (which it can), the current logic treats that as a success and operates on a NULL pointer.<br>
<br>
-----Original Message-----<br>
From: Gedare Bloom <<a href="mailto:gedare@rtems.org" target="_blank" rel="noreferrer">gedare@rtems.org</a>> <br>
Sent: Thursday, June 25, 2020 16:49<br>
To: Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com" target="_blank" rel="noreferrer">kinsey.moore@oarcorp.com</a>><br>
Cc: <a href="mailto:devel@rtems.org" target="_blank" rel="noreferrer">devel@rtems.org</a><br>
Subject: Re: [PATCH] posix: Only check shm_unlink obj_err if necessary<br>
<br>
Hi Kinsey,<br>
<br>
I missed seeing this. Two quick questions for you.<br>
<br>
1. does it also work to initialize obj_err to 0? that would be simpler code.<br>
<br>
2. I see the error handling logic changes slightly, with OBJECTS_GET_BY_NAME_NO_OBJECT now returning ENOENT. I guess if it works to init obj_err to 0, this case should be merged back to the OBJECTS_GET_BY_NAME_INVALID_NAME case?<br>
<br>
On Thu, Jun 25, 2020 at 2:21 PM Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com" target="_blank" rel="noreferrer">kinsey.moore@oarcorp.com</a>> wrote:<br>
><br>
> Is there anything stopping this from being merged? I just ran into this bug again on the current project I'm working on.<br>
><br>
> Kinsey<br>
><br>
> -----Original Message-----<br>
> From: Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com" target="_blank" rel="noreferrer">kinsey.moore@oarcorp.com</a>><br>
> Sent: Tuesday, January 28, 2020 12:37<br>
> To: <a href="mailto:devel@rtems.org" target="_blank" rel="noreferrer">devel@rtems.org</a><br>
> Cc: Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com" target="_blank" rel="noreferrer">kinsey.moore@oarcorp.com</a>><br>
> Subject: [PATCH] posix: Only check shm_unlink obj_err if necessary<br>
><br>
> In the nominal case checked by spsysinit01, obj_err is unmodified if _POSIX_Shm_Get_by_name returns non-NULL. In the case of shm_unlink, this means an uninitialized value is passed into the switch and it appears this test was passing by virtue of the stack having the right value on it in most cases. This now checks obj_err only if _POSIX_Shm_Get_by_name returns NULL.<br>
> ---<br>
>  cpukit/posix/src/shmunlink.c | 45 <br>
> ++++++++++++++++++------------------<br>
>  1 file changed, 23 insertions(+), 22 deletions(-)<br>
><br>
> diff --git a/cpukit/posix/src/shmunlink.c <br>
> b/cpukit/posix/src/shmunlink.c index 00d743ac80..39c2ba0d87 100644<br>
> --- a/cpukit/posix/src/shmunlink.c<br>
> +++ b/cpukit/posix/src/shmunlink.c<br>
> @@ -29,28 +29,29 @@ int shm_unlink( const char *name )<br>
>    _Objects_Allocator_lock();<br>
><br>
>    shm = _POSIX_Shm_Get_by_name( name, 0, &obj_err );<br>
> -  switch ( obj_err ) {<br>
> -    case OBJECTS_GET_BY_NAME_INVALID_NAME:<br>
> -      err = ENOENT;<br>
> -      break;<br>
> -<br>
> -    case OBJECTS_GET_BY_NAME_NAME_TOO_LONG:<br>
> -      err = ENAMETOOLONG;<br>
> -      break;<br>
> -<br>
> -    case OBJECTS_GET_BY_NAME_NO_OBJECT:<br>
> -    default:<br>
> -      _Objects_Namespace_remove_string(<br>
> -        &_POSIX_Shm_Information,<br>
> -        &shm->Object<br>
> -      );<br>
> -<br>
> -      if ( shm->reference_count == 0 ) {<br>
> -        /* Only remove the shm object if no references exist to it. Otherwise,<br>
> -         * the shm object will be freed later in _POSIX_Shm_Attempt_delete */<br>
> -        _POSIX_Shm_Free( shm );<br>
> -      }<br>
> -      break;<br>
> +  if ( shm ) {<br>
> +    _Objects_Namespace_remove_string(<br>
> +      &_POSIX_Shm_Information,<br>
> +      &shm->Object<br>
> +    );<br>
> +<br>
> +    if ( shm->reference_count == 0 ) {<br>
> +      /* Only remove the shm object if no references exist to it. Otherwise,<br>
> +       * the shm object will be freed later in _POSIX_Shm_Attempt_delete */<br>
> +      _POSIX_Shm_Free( shm );<br>
> +    }<br>
> +  } else {<br>
> +    switch ( obj_err ) {<br>
> +      case OBJECTS_GET_BY_NAME_NAME_TOO_LONG:<br>
> +        err = ENAMETOOLONG;<br>
> +        break;<br>
> +<br>
> +      case OBJECTS_GET_BY_NAME_INVALID_NAME:<br>
> +      case OBJECTS_GET_BY_NAME_NO_OBJECT:<br>
> +      default:<br>
> +        err = ENOENT;<br>
> +        break;<br>
> +    }<br>
>    }<br>
><br>
>    _Objects_Allocator_unlock();<br>
> --<br>
> 2.20.1<br>
><br>
> _______________________________________________<br>
> devel mailing list<br>
> <a href="mailto:devel@rtems.org" target="_blank" rel="noreferrer">devel@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div>