* [patch 3/3] xen/privcmd: remove const modifier from declaration
@ 2012-09-08 9:58 Dan Carpenter
2012-09-09 19:50 ` Andres Lagar-Cavilla
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Dan Carpenter @ 2012-09-08 9:58 UTC (permalink / raw)
To: Andres Lagar-Cavilla
Cc: kernel-janitors, Jeremy Fitzhardinge, xen-devel, virtualization,
Konrad Rzeszutek Wilk
When we use this pointer, we cast away the const modifier and modify the
data. I think it was an accident to declare it as const.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
diff --git a/include/xen/privcmd.h b/include/xen/privcmd.h
index a853168..58ed953 100644
--- a/include/xen/privcmd.h
+++ b/include/xen/privcmd.h
@@ -69,7 +69,7 @@ struct privcmd_mmapbatch_v2 {
unsigned int num; /* number of pages to populate */
domid_t dom; /* target domain */
__u64 addr; /* virtual address */
- const xen_pfn_t __user *arr; /* array of mfns */
+ xen_pfn_t __user *arr; /* array of mfns */
int __user *err; /* array of error codes */
};
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
index 0ce006a..fceb83e 100644
--- a/drivers/xen/privcmd.c
+++ b/drivers/xen/privcmd.c
@@ -389,7 +389,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata, int version)
if (state.global_error && (version == 1)) {
/* Write back errors in second pass. */
- state.user_mfn = (xen_pfn_t *)m.arr;
+ state.user_mfn = m.arr;
state.err = err_array;
ret = traverse_pages(m.num, sizeof(xen_pfn_t),
&pagelist, mmap_return_errors_v1, &state);
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [patch 3/3] xen/privcmd: remove const modifier from declaration
2012-09-08 9:58 [patch 3/3] xen/privcmd: remove const modifier from declaration Dan Carpenter
@ 2012-09-09 19:50 ` Andres Lagar-Cavilla
2012-09-10 9:03 ` [Xen-devel] " Jan Beulich
[not found] ` <504DC8FE020000780009A190@nat28.tlf.novell.com>
2 siblings, 0 replies; 5+ messages in thread
From: Andres Lagar-Cavilla @ 2012-09-09 19:50 UTC (permalink / raw)
To: Dan Carpenter
Cc: Jeremy Fitzhardinge, xen-devel, Konrad Rzeszutek Wilk,
Andres Lagar-Cavilla, kernel-janitors, virtualization
On Sep 8, 2012, at 5:58 AM, Dan Carpenter wrote:
> When we use this pointer, we cast away the const modifier and modify the
> data. I think it was an accident to declare it as const.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Thanks for the careful review & hardening.
Andres
>
> diff --git a/include/xen/privcmd.h b/include/xen/privcmd.h
> index a853168..58ed953 100644
> --- a/include/xen/privcmd.h
> +++ b/include/xen/privcmd.h
> @@ -69,7 +69,7 @@ struct privcmd_mmapbatch_v2 {
> unsigned int num; /* number of pages to populate */
> domid_t dom; /* target domain */
> __u64 addr; /* virtual address */
> - const xen_pfn_t __user *arr; /* array of mfns */
> + xen_pfn_t __user *arr; /* array of mfns */
> int __user *err; /* array of error codes */
> };
>
> diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
> index 0ce006a..fceb83e 100644
> --- a/drivers/xen/privcmd.c
> +++ b/drivers/xen/privcmd.c
> @@ -389,7 +389,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata, int version)
>
> if (state.global_error && (version == 1)) {
> /* Write back errors in second pass. */
> - state.user_mfn = (xen_pfn_t *)m.arr;
> + state.user_mfn = m.arr;
> state.err = err_array;
> ret = traverse_pages(m.num, sizeof(xen_pfn_t),
> &pagelist, mmap_return_errors_v1, &state);
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xen-devel] [patch 3/3] xen/privcmd: remove const modifier from declaration
2012-09-08 9:58 [patch 3/3] xen/privcmd: remove const modifier from declaration Dan Carpenter
2012-09-09 19:50 ` Andres Lagar-Cavilla
@ 2012-09-10 9:03 ` Jan Beulich
[not found] ` <504DC8FE020000780009A190@nat28.tlf.novell.com>
2 siblings, 0 replies; 5+ messages in thread
From: Jan Beulich @ 2012-09-10 9:03 UTC (permalink / raw)
To: Andres Lagar-Cavilla, Dan Carpenter
Cc: Jeremy Fitzhardinge, xen-devel, kernel-janitors,
Konrad Rzeszutek Wilk, virtualization
>>> On 08.09.12 at 11:58, Dan Carpenter <dan.carpenter@oracle.com> wrote:
> When we use this pointer, we cast away the const modifier and modify the
> data. I think it was an accident to declare it as const.
NAK - the const is very valid here, as the v2 interface (as opposed
to the v1 one) does _not_ modify this array (or if it does, it's a
bug). This is a guarantee made to user mode, so it should also be
expressed that way in the interface.
But of course the cast used before this patch isn't right either, as
it indeed inappropriately discards the qualifier. Afaiu this was done
to simplify the internal workings of the code, but I don't think it's
desirable to sacrifice type safety for implementation simplicity.
Jan
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
>
> diff --git a/include/xen/privcmd.h b/include/xen/privcmd.h
> index a853168..58ed953 100644
> --- a/include/xen/privcmd.h
> +++ b/include/xen/privcmd.h
> @@ -69,7 +69,7 @@ struct privcmd_mmapbatch_v2 {
> unsigned int num; /* number of pages to populate */
> domid_t dom; /* target domain */
> __u64 addr; /* virtual address */
> - const xen_pfn_t __user *arr; /* array of mfns */
> + xen_pfn_t __user *arr; /* array of mfns */
> int __user *err; /* array of error codes */
> };
>
> diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
> index 0ce006a..fceb83e 100644
> --- a/drivers/xen/privcmd.c
> +++ b/drivers/xen/privcmd.c
> @@ -389,7 +389,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata,
> int version)
>
> if (state.global_error && (version == 1)) {
> /* Write back errors in second pass. */
> - state.user_mfn = (xen_pfn_t *)m.arr;
> + state.user_mfn = m.arr;
> state.err = err_array;
> ret = traverse_pages(m.num, sizeof(xen_pfn_t),
> &pagelist, mmap_return_errors_v1, &state);
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 3/3 v2] xen/privcmd: add a __user annotation to a cast
[not found] ` <504DC8FE020000780009A190@nat28.tlf.novell.com>
@ 2012-09-10 10:21 ` Dan Carpenter
2012-09-10 10:43 ` [Xen-devel] [patch 3/3] xen/privcmd: remove const modifier from declaration David Vrabel
1 sibling, 0 replies; 5+ messages in thread
From: Dan Carpenter @ 2012-09-10 10:21 UTC (permalink / raw)
To: Andres Lagar-Cavilla
Cc: kernel-janitors, Jeremy Fitzhardinge, xen-devel, virtualization,
Konrad Rzeszutek Wilk
Sparse complains that we lose the __user annotation in the cast here.
drivers/xen/privcmd.c:388:35: warning: cast removes address space of expression
drivers/xen/privcmd.c:388:32: warning: incorrect type in assignment (different address spaces)
drivers/xen/privcmd.c:388:32: expected unsigned long [noderef] [usertype] <asn:1>*[addressable] [assigned] user_mfn
drivers/xen/privcmd.c:388:32: got unsigned long [usertype] *<noident>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
v2: In v1 I removed the const from the declaration but now I just removed it
from the cast. This data can either be a v1 or a v2 type struct. The m.arr
data is const in version 2 but not in version 1.
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
index 0ce006a..fceb83e 100644
--- a/drivers/xen/privcmd.c
+++ b/drivers/xen/privcmd.c
@@ -389,7 +389,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata, int version)
if (state.global_error && (version == 1)) {
/* Write back errors in second pass. */
- state.user_mfn = (xen_pfn_t *)m.arr;
+ state.user_mfn = (xen_pfn_t __user *)m.arr;
state.err = err_array;
ret = traverse_pages(m.num, sizeof(xen_pfn_t),
&pagelist, mmap_return_errors_v1, &state);
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Xen-devel] [patch 3/3] xen/privcmd: remove const modifier from declaration
[not found] ` <504DC8FE020000780009A190@nat28.tlf.novell.com>
2012-09-10 10:21 ` [patch 3/3 v2] xen/privcmd: add a __user annotation to a cast Dan Carpenter
@ 2012-09-10 10:43 ` David Vrabel
1 sibling, 0 replies; 5+ messages in thread
From: David Vrabel @ 2012-09-10 10:43 UTC (permalink / raw)
To: Jan Beulich
Cc: Jeremy Fitzhardinge, xen-devel, Konrad Rzeszutek Wilk,
Andres Lagar-Cavilla, kernel-janitors, virtualization,
Dan Carpenter
On 10/09/12 10:03, Jan Beulich wrote:
>>>> On 08.09.12 at 11:58, Dan Carpenter <dan.carpenter@oracle.com> wrote:
>> When we use this pointer, we cast away the const modifier and modify the
>> data. I think it was an accident to declare it as const.
>
> NAK - the const is very valid here, as the v2 interface (as opposed
> to the v1 one) does _not_ modify this array (or if it does, it's a
> bug). This is a guarantee made to user mode, so it should also be
> expressed that way in the interface.
>
> But of course the cast used before this patch isn't right either, as
> it indeed inappropriately discards the qualifier. Afaiu this was done
> to simplify the internal workings of the code, but I don't think it's
> desirable to sacrifice type safety for implementation simplicity.
m.arr here isn't const as m is really the V1 structure where m.arr is
non-const.
David
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-09-10 10:43 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-08 9:58 [patch 3/3] xen/privcmd: remove const modifier from declaration Dan Carpenter
2012-09-09 19:50 ` Andres Lagar-Cavilla
2012-09-10 9:03 ` [Xen-devel] " Jan Beulich
[not found] ` <504DC8FE020000780009A190@nat28.tlf.novell.com>
2012-09-10 10:21 ` [patch 3/3 v2] xen/privcmd: add a __user annotation to a cast Dan Carpenter
2012-09-10 10:43 ` [Xen-devel] [patch 3/3] xen/privcmd: remove const modifier from declaration David Vrabel
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).