linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification
@ 2021-07-24  0:40 Rajat Jain
  2021-07-24  0:41 ` Rajat Jain
  2021-07-24  6:48 ` Greg KH
  0 siblings, 2 replies; 5+ messages in thread
From: Rajat Jain @ 2021-07-24  0:40 UTC (permalink / raw)
  To: Andreas Noever, Michael Jamet, Mika Westerberg, Yehezkel Bernat,
	linux-usb, linux-kernel, gregkh
  Cc: Rajat Jain, rajatxjain

For security, we would like to monitor and track when the thunderbolt
devices are authorized and deauthorized (i.e. when the thunderbolt sysfs
"authorized" attribute changes). Currently the userspace gets a udev
change notification when there is a change, but the state may have
changed (again) by the time we look at the authorized attribute in
sysfs. So an authorization event may go unnoticed. Thus make it easier
by informing the actual change (new value of authorized attribute) in
the udev change notification.

The change is included as a key value "authorized=<val>" where <val>
is the new value of sysfs attribute "authorized", and is described at
Documentation/ABI/testing/sysfs-bus-thunderbolt under
/sys/bus/thunderbolt/devices/.../authorized

Signed-off-by: Rajat Jain <rajatja@google.com>
---
 drivers/thunderbolt/switch.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
index 83b1ef3d5d03..382128dfbdee 100644
--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -1499,6 +1499,7 @@ static ssize_t authorized_show(struct device *dev,
 static int disapprove_switch(struct device *dev, void *not_used)
 {
 	struct tb_switch *sw;
+	char *envp[] = { "AUTHORIZED=0", NULL };
 
 	sw = tb_to_switch(dev);
 	if (sw && sw->authorized) {
@@ -1514,7 +1515,7 @@ static int disapprove_switch(struct device *dev, void *not_used)
 			return ret;
 
 		sw->authorized = 0;
-		kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
+		kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
 	}
 
 	return 0;
@@ -1523,6 +1524,8 @@ static int disapprove_switch(struct device *dev, void *not_used)
 static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
 {
 	int ret = -EINVAL;
+	char envp_string[13];
+	char *envp[] = { envp_string, NULL };
 
 	if (!mutex_trylock(&sw->tb->lock))
 		return restart_syscall();
@@ -1560,7 +1563,8 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
 	if (!ret) {
 		sw->authorized = val;
 		/* Notify status change to the userspace */
-		kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
+		sprintf(envp_string, "AUTHORIZED=%u", sw->authorized);
+		kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
 	}
 
 unlock:
-- 
2.32.0.432.gabb21c7263-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification
  2021-07-24  0:40 [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification Rajat Jain
@ 2021-07-24  0:41 ` Rajat Jain
  2021-07-26 13:40   ` Mika Westerberg
  2021-07-24  6:48 ` Greg KH
  1 sibling, 1 reply; 5+ messages in thread
From: Rajat Jain @ 2021-07-24  0:41 UTC (permalink / raw)
  To: Andreas Noever, Michael Jamet, Mika Westerberg, Yehezkel Bernat,
	linux-usb, linux-kernel, Greg Kroah-Hartman
  Cc: rajatxjain

(fixing the typo in the email ID for Greg).

On Fri, Jul 23, 2021 at 5:40 PM Rajat Jain <rajatja@google.com> wrote:
>
> For security, we would like to monitor and track when the thunderbolt
> devices are authorized and deauthorized (i.e. when the thunderbolt sysfs
> "authorized" attribute changes). Currently the userspace gets a udev
> change notification when there is a change, but the state may have
> changed (again) by the time we look at the authorized attribute in
> sysfs. So an authorization event may go unnoticed. Thus make it easier
> by informing the actual change (new value of authorized attribute) in
> the udev change notification.
>
> The change is included as a key value "authorized=<val>" where <val>
> is the new value of sysfs attribute "authorized", and is described at
> Documentation/ABI/testing/sysfs-bus-thunderbolt under
> /sys/bus/thunderbolt/devices/.../authorized
>
> Signed-off-by: Rajat Jain <rajatja@google.com>
> ---
>  drivers/thunderbolt/switch.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
> index 83b1ef3d5d03..382128dfbdee 100644
> --- a/drivers/thunderbolt/switch.c
> +++ b/drivers/thunderbolt/switch.c
> @@ -1499,6 +1499,7 @@ static ssize_t authorized_show(struct device *dev,
>  static int disapprove_switch(struct device *dev, void *not_used)
>  {
>         struct tb_switch *sw;
> +       char *envp[] = { "AUTHORIZED=0", NULL };
>
>         sw = tb_to_switch(dev);
>         if (sw && sw->authorized) {
> @@ -1514,7 +1515,7 @@ static int disapprove_switch(struct device *dev, void *not_used)
>                         return ret;
>
>                 sw->authorized = 0;
> -               kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
> +               kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
>         }
>
>         return 0;
> @@ -1523,6 +1524,8 @@ static int disapprove_switch(struct device *dev, void *not_used)
>  static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
>  {
>         int ret = -EINVAL;
> +       char envp_string[13];
> +       char *envp[] = { envp_string, NULL };
>
>         if (!mutex_trylock(&sw->tb->lock))
>                 return restart_syscall();
> @@ -1560,7 +1563,8 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
>         if (!ret) {
>                 sw->authorized = val;
>                 /* Notify status change to the userspace */
> -               kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
> +               sprintf(envp_string, "AUTHORIZED=%u", sw->authorized);
> +               kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
>         }
>
>  unlock:
> --
> 2.32.0.432.gabb21c7263-goog
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification
  2021-07-24  0:40 [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification Rajat Jain
  2021-07-24  0:41 ` Rajat Jain
@ 2021-07-24  6:48 ` Greg KH
  1 sibling, 0 replies; 5+ messages in thread
From: Greg KH @ 2021-07-24  6:48 UTC (permalink / raw)
  To: Rajat Jain
  Cc: Andreas Noever, Michael Jamet, Mika Westerberg, Yehezkel Bernat,
	linux-usb, linux-kernel, gregkh, rajatxjain

On Fri, Jul 23, 2021 at 05:40:43PM -0700, Rajat Jain wrote:
> For security, we would like to monitor and track when the thunderbolt
> devices are authorized and deauthorized (i.e. when the thunderbolt sysfs
> "authorized" attribute changes). Currently the userspace gets a udev
> change notification when there is a change, but the state may have
> changed (again) by the time we look at the authorized attribute in
> sysfs. So an authorization event may go unnoticed. Thus make it easier
> by informing the actual change (new value of authorized attribute) in
> the udev change notification.
> 
> The change is included as a key value "authorized=<val>" where <val>
> is the new value of sysfs attribute "authorized", and is described at
> Documentation/ABI/testing/sysfs-bus-thunderbolt under
> /sys/bus/thunderbolt/devices/.../authorized
> 
> Signed-off-by: Rajat Jain <rajatja@google.com>
> ---
>  drivers/thunderbolt/switch.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)

Hi,

This is the friendly patch-bot of Greg Kroah-Hartman.  You have sent him
a patch that has triggered this response.  He used to manually respond
to these common problems, but in order to save his sanity (he kept
writing the same thing over and over, yet to different people), I was
created.  Hopefully you will not take offence and will fix the problem
in your patch and resubmit it so that it can be accepted into the Linux
kernel tree.

You are receiving this message because of the following common error(s)
as indicated below:

- This looks like a new version of a previously submitted patch, but you
  did not list below the --- line any changes from the previous version.
  Please read the section entitled "The canonical patch format" in the
  kernel file, Documentation/SubmittingPatches for what needs to be done
  here to properly describe this.

If you wish to discuss this problem further, or you have questions about
how to resolve this issue, please feel free to respond to this email and
Greg will reply once he has dug out from the pending patches received
from other developers.

thanks,

greg k-h's patch email bot

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification
  2021-07-24  0:41 ` Rajat Jain
@ 2021-07-26 13:40   ` Mika Westerberg
  2021-07-30 23:55     ` Rajat Jain
  0 siblings, 1 reply; 5+ messages in thread
From: Mika Westerberg @ 2021-07-26 13:40 UTC (permalink / raw)
  To: Rajat Jain
  Cc: Andreas Noever, Michael Jamet, Yehezkel Bernat, linux-usb,
	linux-kernel, Greg Kroah-Hartman, rajatxjain

Hi Rajat,

On Fri, Jul 23, 2021 at 05:41:58PM -0700, Rajat Jain wrote:
> (fixing the typo in the email ID for Greg).
> 
> On Fri, Jul 23, 2021 at 5:40 PM Rajat Jain <rajatja@google.com> wrote:
> >
> > For security, we would like to monitor and track when the thunderbolt
> > devices are authorized and deauthorized (i.e. when the thunderbolt sysfs
> > "authorized" attribute changes). Currently the userspace gets a udev
> > change notification when there is a change, but the state may have
> > changed (again) by the time we look at the authorized attribute in
> > sysfs. So an authorization event may go unnoticed. Thus make it easier
> > by informing the actual change (new value of authorized attribute) in
> > the udev change notification.
> >
> > The change is included as a key value "authorized=<val>" where <val>
> > is the new value of sysfs attribute "authorized", and is described at
> > Documentation/ABI/testing/sysfs-bus-thunderbolt under
> > /sys/bus/thunderbolt/devices/.../authorized

Looking good, a couple of minor nits below.

> >
> > Signed-off-by: Rajat Jain <rajatja@google.com>
> > ---
> >  drivers/thunderbolt/switch.c | 8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
> > index 83b1ef3d5d03..382128dfbdee 100644
> > --- a/drivers/thunderbolt/switch.c
> > +++ b/drivers/thunderbolt/switch.c
> > @@ -1499,6 +1499,7 @@ static ssize_t authorized_show(struct device *dev,
> >  static int disapprove_switch(struct device *dev, void *not_used)
> >  {
> >         struct tb_switch *sw;
> > +       char *envp[] = { "AUTHORIZED=0", NULL };

Can you move arrange this to be before sw, like:

	char *envp[] = { "AUTHORIZED=0", NULL };
	struct tb_switch *sw;

> >
> >         sw = tb_to_switch(dev);
> >         if (sw && sw->authorized) {
> > @@ -1514,7 +1515,7 @@ static int disapprove_switch(struct device *dev, void *not_used)
> >                         return ret;
> >
> >                 sw->authorized = 0;
> > -               kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
> > +               kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
> >         }
> >
> >         return 0;
> > @@ -1523,6 +1524,8 @@ static int disapprove_switch(struct device *dev, void *not_used)
> >  static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
> >  {
> >         int ret = -EINVAL;
> > +       char envp_string[13];
> > +       char *envp[] = { envp_string, NULL };

Ditto.

> >
> >         if (!mutex_trylock(&sw->tb->lock))
> >                 return restart_syscall();
> > @@ -1560,7 +1563,8 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
> >         if (!ret) {
> >                 sw->authorized = val;
> >                 /* Notify status change to the userspace */
> > -               kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
> > +               sprintf(envp_string, "AUTHORIZED=%u", sw->authorized);
> > +               kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
> >         }
> >
> >  unlock:
> > --
> > 2.32.0.432.gabb21c7263-goog
> >

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification
  2021-07-26 13:40   ` Mika Westerberg
@ 2021-07-30 23:55     ` Rajat Jain
  0 siblings, 0 replies; 5+ messages in thread
From: Rajat Jain @ 2021-07-30 23:55 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: Andreas Noever, Michael Jamet, Yehezkel Bernat, linux-usb,
	linux-kernel, Greg Kroah-Hartman, rajatxjain

On Mon, Jul 26, 2021 at 6:40 AM Mika Westerberg
<mika.westerberg@linux.intel.com> wrote:
>
> Hi Rajat,
>
> On Fri, Jul 23, 2021 at 05:41:58PM -0700, Rajat Jain wrote:
> > (fixing the typo in the email ID for Greg).
> >
> > On Fri, Jul 23, 2021 at 5:40 PM Rajat Jain <rajatja@google.com> wrote:
> > >
> > > For security, we would like to monitor and track when the thunderbolt
> > > devices are authorized and deauthorized (i.e. when the thunderbolt sysfs
> > > "authorized" attribute changes). Currently the userspace gets a udev
> > > change notification when there is a change, but the state may have
> > > changed (again) by the time we look at the authorized attribute in
> > > sysfs. So an authorization event may go unnoticed. Thus make it easier
> > > by informing the actual change (new value of authorized attribute) in
> > > the udev change notification.
> > >
> > > The change is included as a key value "authorized=<val>" where <val>
> > > is the new value of sysfs attribute "authorized", and is described at
> > > Documentation/ABI/testing/sysfs-bus-thunderbolt under
> > > /sys/bus/thunderbolt/devices/.../authorized
>
> Looking good, a couple of minor nits below.
>
> > >
> > > Signed-off-by: Rajat Jain <rajatja@google.com>
> > > ---
> > >  drivers/thunderbolt/switch.c | 8 ++++++--
> > >  1 file changed, 6 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
> > > index 83b1ef3d5d03..382128dfbdee 100644
> > > --- a/drivers/thunderbolt/switch.c
> > > +++ b/drivers/thunderbolt/switch.c
> > > @@ -1499,6 +1499,7 @@ static ssize_t authorized_show(struct device *dev,
> > >  static int disapprove_switch(struct device *dev, void *not_used)
> > >  {
> > >         struct tb_switch *sw;
> > > +       char *envp[] = { "AUTHORIZED=0", NULL };
>
> Can you move arrange this to be before sw, like:

Done.

>
>         char *envp[] = { "AUTHORIZED=0", NULL };
>         struct tb_switch *sw;
>
> > >
> > >         sw = tb_to_switch(dev);
> > >         if (sw && sw->authorized) {
> > > @@ -1514,7 +1515,7 @@ static int disapprove_switch(struct device *dev, void *not_used)
> > >                         return ret;
> > >
> > >                 sw->authorized = 0;
> > > -               kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
> > > +               kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
> > >         }
> > >
> > >         return 0;
> > > @@ -1523,6 +1524,8 @@ static int disapprove_switch(struct device *dev, void *not_used)
> > >  static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
> > >  {
> > >         int ret = -EINVAL;
> > > +       char envp_string[13];
> > > +       char *envp[] = { envp_string, NULL };
>
> Ditto.

Done. I still needed to define envp_string before envp (because it is
used in initialization).

I sent out a v3 with these changes.

Thanks,

Rajat

>
> > >
> > >         if (!mutex_trylock(&sw->tb->lock))
> > >                 return restart_syscall();
> > > @@ -1560,7 +1563,8 @@ static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
> > >         if (!ret) {
> > >                 sw->authorized = val;
> > >                 /* Notify status change to the userspace */
> > > -               kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
> > > +               sprintf(envp_string, "AUTHORIZED=%u", sw->authorized);
> > > +               kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
> > >         }
> > >
> > >  unlock:
> > > --
> > > 2.32.0.432.gabb21c7263-goog
> > >

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-07-30 23:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-24  0:40 [PATCH v2] thunderbolt: For dev authorization changes, include the actual event in udev change notification Rajat Jain
2021-07-24  0:41 ` Rajat Jain
2021-07-26 13:40   ` Mika Westerberg
2021-07-30 23:55     ` Rajat Jain
2021-07-24  6:48 ` Greg KH

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).