diff mbox series

[XEN] mismatch between pyxc_methods flags and PyObject definitions

Message ID 27a883ea723d5d123cb3a10d2a6092ad54a6171e.1584485918.git.m.a.young@durham.ac.uk (mailing list archive)
State New, archived
Headers show
Series [XEN] mismatch between pyxc_methods flags and PyObject definitions | expand

Commit Message

Michael Young March 17, 2020, 11:01 p.m. UTC
pygrub in xen-4.13.0 with python 3.8.2 fails with the error

Traceback (most recent call last):
  File "/usr/libexec/xen/bin/pygrub", line 21, in <module>
    import xen.lowlevel.xc
SystemError: bad call flags

This patch fixes mismatches in tools/python/xen/lowlevel/xc/xc.c
between the flag bits defined in pyxc_methods and the parameters passed
to the corresponding PyObject definitions.

With this patch applied pygrub works as expected.

Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
---
 tools/python/xen/lowlevel/xc/xc.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

Comments

Wei Liu March 23, 2020, 11:48 a.m. UTC | #1
On Tue, Mar 17, 2020 at 11:01:43PM +0000, YOUNG, MICHAEL A. wrote:
> pygrub in xen-4.13.0 with python 3.8.2 fails with the error
> 
> Traceback (most recent call last):
>   File "/usr/libexec/xen/bin/pygrub", line 21, in <module>
>     import xen.lowlevel.xc
> SystemError: bad call flags
> 
> This patch fixes mismatches in tools/python/xen/lowlevel/xc/xc.c
> between the flag bits defined in pyxc_methods and the parameters passed
> to the corresponding PyObject definitions.
> 
> With this patch applied pygrub works as expected.
> 
> Signed-off-by: Michael Young <m.a.young@durham.ac.uk>

I briefly checked Python's documentation. This patch looks correctly to
me. FWIW:

Reviewed-by: Wei Liu <wl@xen.org>

I will wait for Marek's opinion.

Wei.
Marek Marczykowski-Górecki March 24, 2020, 2:32 a.m. UTC | #2
On Tue, Mar 17, 2020 at 11:01:43PM +0000, YOUNG, MICHAEL A. wrote:
> pygrub in xen-4.13.0 with python 3.8.2 fails with the error
> 
> Traceback (most recent call last):
>   File "/usr/libexec/xen/bin/pygrub", line 21, in <module>
>     import xen.lowlevel.xc
> SystemError: bad call flags
> 
> This patch fixes mismatches in tools/python/xen/lowlevel/xc/xc.c
> between the flag bits defined in pyxc_methods and the parameters passed
> to the corresponding PyObject definitions.
> 
> With this patch applied pygrub works as expected.
> 
> Signed-off-by: Michael Young <m.a.young@durham.ac.uk>

This looks like a change in Python 3.7 (according to the documentation,
might not be enforced there yet). Python <= 3.6 allowed METH_KEYWORDS
used alone. Fortunately, all the versions supports METH_VARARGS |
METH_KEYWORDS, which looks to be equivalent to old METH_KEYWORDS alone.

Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>


> ---
>  tools/python/xen/lowlevel/xc/xc.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
> index ac0e26a742..8fde5f311f 100644
> --- a/tools/python/xen/lowlevel/xc/xc.c
> +++ b/tools/python/xen/lowlevel/xc/xc.c
> @@ -2028,7 +2028,7 @@ static PyMethodDef pyxc_methods[] = {
>  
>      { "gnttab_hvm_seed",
>        (PyCFunction)pyxc_gnttab_hvm_seed,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Initialise HVM guest grant table.\n"
>        " dom     [int]:      Identifier of domain to build into.\n"
>        " console_gmfn [int]: \n"
> @@ -2097,7 +2097,7 @@ static PyMethodDef pyxc_methods[] = {
>  
>      { "sched_credit_domain_set",
>        (PyCFunction)pyxc_sched_credit_domain_set,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Set the scheduling parameters for a domain when running with the\n"
>        "SMP credit scheduler.\n"
>        " domid     [int]:   domain id to set\n"
> @@ -2115,7 +2115,7 @@ static PyMethodDef pyxc_methods[] = {
>  
>      { "sched_credit2_domain_set",
>        (PyCFunction)pyxc_sched_credit2_domain_set,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Set the scheduling parameters for a domain when running with the\n"
>        "SMP credit2 scheduler.\n"
>        " domid     [int]:   domain id to set\n"
> @@ -2393,21 +2393,21 @@ static PyMethodDef pyxc_methods[] = {
>  
>      { "flask_context_to_sid",
>        (PyCFunction)pyflask_context_to_sid,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Convert a context string to a dynamic SID.\n"
>        " context [str]: String specifying context to be converted\n"
>        "Returns: [int]: Numeric SID on success; -1 on error.\n" },
>  
>      { "flask_sid_to_context",
>        (PyCFunction)pyflask_sid_to_context,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Convert a dynamic SID to context string.\n"
>        " context [int]: SID to be converted\n"
>        "Returns: [str]: Numeric SID on success; -1 on error.\n" },
>  
>      { "flask_load",
>        (PyCFunction)pyflask_load,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Loads a policy into the hypervisor.\n"
>        " policy [str]: policy to be load\n"
>        "Returns: [int]: 0 on success; -1 on failure.\n" }, 
> @@ -2420,14 +2420,14 @@ static PyMethodDef pyxc_methods[] = {
>  
>      { "flask_setenforce",
>        (PyCFunction)pyflask_setenforce,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Modifies the current mode for the Flask XSM module.\n"
>        " mode [int]: mode to change to\n"
>        "Returns: [int]: 0 on success; -1 on failure.\n" }, 
>  
>      { "flask_access",
>        (PyCFunction)pyflask_access,
> -      METH_KEYWORDS, "\n"
> +      METH_VARARGS | METH_KEYWORDS, "\n"
>        "Returns whether a source context has access to target context based on \
>         class and permissions requested.\n"
>        " scon [str]: source context\n"
Wei Liu March 28, 2020, 11:19 a.m. UTC | #3
On Tue, Mar 24, 2020 at 03:32:26AM +0100, Marek Marczykowski-Górecki wrote:
> On Tue, Mar 17, 2020 at 11:01:43PM +0000, YOUNG, MICHAEL A. wrote:
> > pygrub in xen-4.13.0 with python 3.8.2 fails with the error
> > 
> > Traceback (most recent call last):
> >   File "/usr/libexec/xen/bin/pygrub", line 21, in <module>
> >     import xen.lowlevel.xc
> > SystemError: bad call flags
> > 
> > This patch fixes mismatches in tools/python/xen/lowlevel/xc/xc.c
> > between the flag bits defined in pyxc_methods and the parameters passed
> > to the corresponding PyObject definitions.
> > 
> > With this patch applied pygrub works as expected.
> > 
> > Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
> 
> This looks like a change in Python 3.7 (according to the documentation,
> might not be enforced there yet). Python <= 3.6 allowed METH_KEYWORDS
> used alone. Fortunately, all the versions supports METH_VARARGS |
> METH_KEYWORDS, which looks to be equivalent to old METH_KEYWORDS alone.
> 
> Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

Thanks. I added "tools/python" to the subject line and committed this
patch.

Ian, this needs to be backported to at least 4.13 since we started
supported Python 3 in that version.

Backport: 4.13

Wei.
Ian Jackson March 30, 2020, 2:05 p.m. UTC | #4
Wei Liu writes ("Re: [XEN PATCH] mismatch between pyxc_methods flags and PyObject definitions"):
> Ian, this needs to be backported to at least 4.13 since we started
> supported Python 3 in that version.
> 
> Backport: 4.13

Noted.

Ian.
diff mbox series

Patch

diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
index ac0e26a742..8fde5f311f 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -2028,7 +2028,7 @@  static PyMethodDef pyxc_methods[] = {
 
     { "gnttab_hvm_seed",
       (PyCFunction)pyxc_gnttab_hvm_seed,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Initialise HVM guest grant table.\n"
       " dom     [int]:      Identifier of domain to build into.\n"
       " console_gmfn [int]: \n"
@@ -2097,7 +2097,7 @@  static PyMethodDef pyxc_methods[] = {
 
     { "sched_credit_domain_set",
       (PyCFunction)pyxc_sched_credit_domain_set,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Set the scheduling parameters for a domain when running with the\n"
       "SMP credit scheduler.\n"
       " domid     [int]:   domain id to set\n"
@@ -2115,7 +2115,7 @@  static PyMethodDef pyxc_methods[] = {
 
     { "sched_credit2_domain_set",
       (PyCFunction)pyxc_sched_credit2_domain_set,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Set the scheduling parameters for a domain when running with the\n"
       "SMP credit2 scheduler.\n"
       " domid     [int]:   domain id to set\n"
@@ -2393,21 +2393,21 @@  static PyMethodDef pyxc_methods[] = {
 
     { "flask_context_to_sid",
       (PyCFunction)pyflask_context_to_sid,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Convert a context string to a dynamic SID.\n"
       " context [str]: String specifying context to be converted\n"
       "Returns: [int]: Numeric SID on success; -1 on error.\n" },
 
     { "flask_sid_to_context",
       (PyCFunction)pyflask_sid_to_context,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Convert a dynamic SID to context string.\n"
       " context [int]: SID to be converted\n"
       "Returns: [str]: Numeric SID on success; -1 on error.\n" },
 
     { "flask_load",
       (PyCFunction)pyflask_load,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Loads a policy into the hypervisor.\n"
       " policy [str]: policy to be load\n"
       "Returns: [int]: 0 on success; -1 on failure.\n" }, 
@@ -2420,14 +2420,14 @@  static PyMethodDef pyxc_methods[] = {
 
     { "flask_setenforce",
       (PyCFunction)pyflask_setenforce,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Modifies the current mode for the Flask XSM module.\n"
       " mode [int]: mode to change to\n"
       "Returns: [int]: 0 on success; -1 on failure.\n" }, 
 
     { "flask_access",
       (PyCFunction)pyflask_access,
-      METH_KEYWORDS, "\n"
+      METH_VARARGS | METH_KEYWORDS, "\n"
       "Returns whether a source context has access to target context based on \
        class and permissions requested.\n"
       " scon [str]: source context\n"