Re: [PATCH] libsemanage: open lock_file with O_RDWR

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

 



On Fri, Nov 15, 2024 at 9:16 AM James Carter <jwcart2@xxxxxxxxx> wrote:
>
> On Mon, Nov 11, 2024 at 7:33 AM Petr Lautrbach <lautrbach@xxxxxxxxxx> wrote:
> >
> > man 2 flock:
> >     Since Linux 2.6.12, NFS clients support flock() locks by emulating
> >     them as fcntl(2) byte-range locks on the entire file.  This means
> >     that fcntl(2) and  flock()  locks  do  interact with one another
> >     over NFS.  It also means that in order to place an exclusive lock,
> >     the file must be opened for writing.
> >
> > Fixes:
> >     # semanage fcontext -d -e /home /tmp/testdir
> >     libsemanage.semanage_get_lock: Error obtaining direct transaction lock at /var/lib/selinux/targeted/semanage.trans.LOCK. (Bad file descriptor).
> >     OSError: Bad file descriptor
> >
> > Signed-off-by: Petr Lautrbach <lautrbach@xxxxxxxxxx>
>
> Acked-by: James Carter <jwcart2@xxxxxxxxx>
>

Merged.
Thanks,
Jim

> > ---
> >  libsemanage/src/semanage_store.c | 14 ++++++--------
> >  1 file changed, 6 insertions(+), 8 deletions(-)
> >
> > diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c
> > index 0ac2e5b2ad39..c26f5667b3cd 100644
> > --- a/libsemanage/src/semanage_store.c
> > +++ b/libsemanage/src/semanage_store.c
> > @@ -1899,14 +1899,12 @@ static int semanage_get_lock(semanage_handle_t * sh,
> >         struct timeval origtime, curtime;
> >         int got_lock = 0;
> >
> > -       if ((fd = open(lock_file, O_RDONLY)) == -1) {
> > -               if ((fd =
> > -                    open(lock_file, O_RDWR | O_CREAT | O_TRUNC,
> > -                         S_IRUSR | S_IWUSR)) == -1) {
> > -                       ERR(sh, "Could not open direct %s at %s.", lock_name,
> > -                           lock_file);
> > -                       return -1;
> > -               }
> > +       if ((fd =
> > +            open(lock_file, O_RDWR | O_CREAT | O_TRUNC,
> > +                 S_IRUSR | S_IWUSR)) == -1) {
> > +               ERR(sh, "Could not open direct %s at %s.", lock_name,
> > +                   lock_file);
> > +               return -1;
> >         }
> >         if (fcntl(fd, F_SETFD, FD_CLOEXEC) < 0) {
> >                 ERR(sh, "Could not set close-on-exec for %s at %s.", lock_name,
> > --
> > 2.47.0
> >
> >





[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux