Re: [Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-22 Thread Konrad Rzeszutek Wilk
On Thu, Sep 22, 2016 at 11:36:40AM +0100, Ian Jackson wrote:
> Ian Jackson writes ("Re: [PATCH v1 3/3] xen-livepatch: If hypervisor is not 
> compiled with Livepatching"):
> > Konrad Rzeszutek Wilk writes ("Re: [PATCH v1 3/3] xen-livepatch: If 
> > hypervisor is not compiled with Livepatching"):
> > > Why would fprintf mess up 'errno' ?
> > 
> > Any libc function is entitled to set errno, if it fails.
> 
> And, I forget the exact rules, but I think most are allowed to trash
> it even if they succeed.  I just remember that errno needs to be saved
> across libc calls, if the value is important.
> 
> In practice, for example, the first fprintf on a particular FILE* can
> end up setting errno to ENOTTY as the libc calls isatty() to decide on
> the buffering mode.

Aaah! Thanks!
> 
> Ian.

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-22 Thread Ross Lagerwall

On 09/22/2016 11:12 AM, Konrad Rzeszutek Wilk wrote:

On Thu, Sep 22, 2016 at 08:25:33AM +0100, Ross Lagerwall wrote:

On 09/21/2016 08:20 PM, Konrad Rzeszutek Wilk wrote:

. print a better error code.

Reported-by: Andrew Cooper 
Signed-off-by: Konrad Rzeszutek Wilk 
---
 tools/misc/xen-livepatch.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tools/misc/xen-livepatch.c b/tools/misc/xen-livepatch.c
index 2de04c0..f11e71f07f 100644
--- a/tools/misc/xen-livepatch.c
+++ b/tools/misc/xen-livepatch.c
@@ -100,8 +100,11 @@ static int list_func(int argc, char *argv[])
 rc = xc_livepatch_list(xch, MAX_LEN, idx, info, name, len, &done, 
&left);
 if ( rc )
 {
-fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
-idx, left, errno, strerror(errno));
+if ( errno == ENOSYS )
+fprintf(stderr, "Hypervisor compiled without Xen 
Livepatching!\n");
+else
+fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
+idx, left, errno, strerror(errno));
 break;
 }
 if ( !idx )



You should save errno since you have an fprintf before you check it.


I am missing something.

Why would fprintf mess up 'errno' ?




If the first fprintf fails for whatever reason (e.g. ENOSPC), then it 
will set errno and the subsequent check of errno afterwards will serve 
no purpose.


I have a patch to fix this issue for the rest of xen-livepatch.c, and 
will send it out shortly.


--
Ross Lagerwall

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-22 Thread Ian Jackson
Ian Jackson writes ("Re: [PATCH v1 3/3] xen-livepatch: If hypervisor is not 
compiled with Livepatching"):
> Konrad Rzeszutek Wilk writes ("Re: [PATCH v1 3/3] xen-livepatch: If 
> hypervisor is not compiled with Livepatching"):
> > Why would fprintf mess up 'errno' ?
> 
> Any libc function is entitled to set errno, if it fails.

And, I forget the exact rules, but I think most are allowed to trash
it even if they succeed.  I just remember that errno needs to be saved
across libc calls, if the value is important.

In practice, for example, the first fprintf on a particular FILE* can
end up setting errno to ENOTTY as the libc calls isatty() to decide on
the buffering mode.

Ian.

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-22 Thread Ian Jackson
Konrad Rzeszutek Wilk writes ("Re: [PATCH v1 3/3] xen-livepatch: If hypervisor 
is not compiled with Livepatching"):
> On Thu, Sep 22, 2016 at 08:25:33AM +0100, Ross Lagerwall wrote:
> > You should save errno since you have an fprintf before you check it.
> 
> I am missing something.
> 
> Why would fprintf mess up 'errno' ?

Any libc function is entitled to set errno, if it fails.

Ian.

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-22 Thread Konrad Rzeszutek Wilk
On Thu, Sep 22, 2016 at 08:25:33AM +0100, Ross Lagerwall wrote:
> On 09/21/2016 08:20 PM, Konrad Rzeszutek Wilk wrote:
> > . print a better error code.
> > 
> > Reported-by: Andrew Cooper 
> > Signed-off-by: Konrad Rzeszutek Wilk 
> > ---
> >  tools/misc/xen-livepatch.c | 7 +--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> > 
> > diff --git a/tools/misc/xen-livepatch.c b/tools/misc/xen-livepatch.c
> > index 2de04c0..f11e71f07f 100644
> > --- a/tools/misc/xen-livepatch.c
> > +++ b/tools/misc/xen-livepatch.c
> > @@ -100,8 +100,11 @@ static int list_func(int argc, char *argv[])
> >  rc = xc_livepatch_list(xch, MAX_LEN, idx, info, name, len, &done, 
> > &left);
> >  if ( rc )
> >  {
> > -fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
> > -idx, left, errno, strerror(errno));
> > +if ( errno == ENOSYS )
> > +fprintf(stderr, "Hypervisor compiled without Xen 
> > Livepatching!\n");
> > +else
> > +fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
> > +idx, left, errno, strerror(errno));
> >  break;
> >  }
> >  if ( !idx )
> > 
> 
> You should save errno since you have an fprintf before you check it.

I am missing something.

Why would fprintf mess up 'errno' ?
> 
> Also, it would be good to do the same check for the first xc_livepatch_get
> in action_func() and for the xc_livepatch_upload in upload_func.


> 
> -- 
> Ross Lagerwall

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-22 Thread Ross Lagerwall

On 09/21/2016 08:20 PM, Konrad Rzeszutek Wilk wrote:

. print a better error code.

Reported-by: Andrew Cooper 
Signed-off-by: Konrad Rzeszutek Wilk 
---
 tools/misc/xen-livepatch.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tools/misc/xen-livepatch.c b/tools/misc/xen-livepatch.c
index 2de04c0..f11e71f07f 100644
--- a/tools/misc/xen-livepatch.c
+++ b/tools/misc/xen-livepatch.c
@@ -100,8 +100,11 @@ static int list_func(int argc, char *argv[])
 rc = xc_livepatch_list(xch, MAX_LEN, idx, info, name, len, &done, 
&left);
 if ( rc )
 {
-fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
-idx, left, errno, strerror(errno));
+if ( errno == ENOSYS )
+fprintf(stderr, "Hypervisor compiled without Xen 
Livepatching!\n");
+else
+fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
+idx, left, errno, strerror(errno));
 break;
 }
 if ( !idx )



You should save errno since you have an fprintf before you check it.

Also, it would be good to do the same check for the first 
xc_livepatch_get in action_func() and for the xc_livepatch_upload in 
upload_func.


--
Ross Lagerwall

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


[Xen-devel] [PATCH v1 3/3] xen-livepatch: If hypervisor is not compiled with Livepatching

2016-09-21 Thread Konrad Rzeszutek Wilk
. print a better error code.

Reported-by: Andrew Cooper 
Signed-off-by: Konrad Rzeszutek Wilk 
---
 tools/misc/xen-livepatch.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tools/misc/xen-livepatch.c b/tools/misc/xen-livepatch.c
index 2de04c0..f11e71f07f 100644
--- a/tools/misc/xen-livepatch.c
+++ b/tools/misc/xen-livepatch.c
@@ -100,8 +100,11 @@ static int list_func(int argc, char *argv[])
 rc = xc_livepatch_list(xch, MAX_LEN, idx, info, name, len, &done, 
&left);
 if ( rc )
 {
-fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
-idx, left, errno, strerror(errno));
+if ( errno == ENOSYS )
+fprintf(stderr, "Hypervisor compiled without Xen 
Livepatching!\n");
+else
+fprintf(stderr, "Failed to list %d/%d: %d(%s)!\n",
+idx, left, errno, strerror(errno));
 break;
 }
 if ( !idx )
-- 
2.4.11


___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel