Re: [PATCH BlueZ] profile: Fail RegisterProfile if UUID already exists

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

 



Hi João,

On Tue, Jun 29, 2021 at 4:52 PM João Paulo Rechi Vita <jprvita@xxxxxxxxx> wrote:
>
> On Thu, Jun 10, 2021 at 7:07 PM João Paulo Rechi Vita <jprvita@xxxxxxxxx> wrote:
> >
> > From: João Paulo Rechi Vita <jprvita@xxxxxxxxx>
> >
> > If a process tries to register a profile implementation that is already
> > registered, RegisterProfile should fail.
> >
> > This should help address issues when two instances of PulseAudio are
> > running at the same time, and the second instance tries to register an
> > audio profile implementation that has already been registered by the
> > first instance. Two situations where this may happen is when more than
> > one user is logged in, or during the transition between the GDM session
> > and the user session, when PulseAudio gets started on the new session
> > before the old session has been fully terminated.
> >
> > https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/303
> > https://gitlab.gnome.org/GNOME/gdm/-/issues/486
>
> Any feedback on these changes?  I have
> https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/593
> on the PulseAudio side, and we have been shipping these changes on
> Endless OS to address the case where PulseAudio gets started on the
> user session before PulseAudio on the GDM session has finished.
>
> Thanks,
>
> João Paulo.
>
> > ---
> >  src/profile.c | 30 ++++++++++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> >
> > diff --git a/src/profile.c b/src/profile.c
> > index 5e460b639..60d17b6ae 100644
> > --- a/src/profile.c
> > +++ b/src/profile.c
> > @@ -749,6 +749,30 @@ void btd_profile_foreach(void (*func)(struct btd_profile *p, void *data),
> >         }
> >  }
> >
> > +static struct btd_profile *btd_profile_find_uuid(const char *uuid)
> > +{
> > +       GSList *l, *next;
> > +
> > +       for (l = profiles; l != NULL; l = next) {
> > +               struct btd_profile *p = l->data;
> > +
> > +               if (!g_strcmp0(p->local_uuid, uuid))
> > +                       return p;
> > +               next = g_slist_next(l);
> > +       }
> > +
> > +       for (l = ext_profiles; l != NULL; l = next) {
> > +               struct ext_profile *ext = l->data;
> > +               struct btd_profile *p = &ext->p;
> > +
> > +               if (!g_strcmp0(p->local_uuid, uuid))
> > +                       return p;
> > +               next = g_slist_next(l);
> > +       }
> > +
> > +       return NULL;
> > +}
> > +
> >  int btd_profile_register(struct btd_profile *profile)
> >  {
> >         profiles = g_slist_append(profiles, profile);
> > @@ -2441,6 +2465,12 @@ static DBusMessage *register_profile(DBusConnection *conn,
> >         dbus_message_iter_get_basic(&args, &uuid);
> >         dbus_message_iter_next(&args);
> >
> > +       if (btd_profile_find_uuid(uuid)) {
> > +               warn("%s tried to register %s which is already registered",
> > +                                                               sender, uuid);
> > +               return btd_error_not_permitted(msg, "UUID already registered");
> > +       }
> > +
> >         if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_ARRAY)
> >                 return btd_error_invalid_args(msg);
> >
> > --
> > 2.20.1
> >

Applied, thanks.

-- 
Luiz Augusto von Dentz




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux