mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/hypfs: switch write function handles to const
The node specific write functions take a void user address handle as parameter. As a write won't change the user memory use a const_void handle instead. This requires a new macro for casting a guest handle to a const type. Suggested-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
70fadc4163
commit
fbb2b92de0
3 files changed
+25
-11
No files matched your search
+11
-6
@@ -344,7 +344,8 @@ static int hypfs_read(const struct hypfs_entry *entry,
|
||||
}
|
||||
|
||||
int hypfs_write_leaf(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen)
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen)
|
||||
{
|
||||
char *buf;
|
||||
int ret;
|
||||
@@ -384,7 +385,8 @@ int hypfs_write_leaf(struct hypfs_entry_leaf *leaf,
|
||||
}
|
||||
|
||||
int hypfs_write_bool(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen)
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen)
|
||||
{
|
||||
bool buf;
|
||||
|
||||
@@ -405,7 +407,8 @@ int hypfs_write_bool(struct hypfs_entry_leaf *leaf,
|
||||
}
|
||||
|
||||
int hypfs_write_custom(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen)
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen)
|
||||
{
|
||||
struct param_hypfs *p;
|
||||
char *buf;
|
||||
@@ -439,13 +442,15 @@ int hypfs_write_custom(struct hypfs_entry_leaf *leaf,
|
||||
}
|
||||
|
||||
int hypfs_write_deny(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen)
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen)
|
||||
{
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
static int hypfs_write(struct hypfs_entry *entry,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned long ulen)
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned long ulen)
|
||||
{
|
||||
struct hypfs_entry_leaf *l;
|
||||
|
||||
@@ -497,7 +502,7 @@ long do_hypfs_op(unsigned int cmd,
|
||||
break;
|
||||
|
||||
case XEN_HYPFS_OP_write_contents:
|
||||
ret = hypfs_write(entry, arg3, arg4);
|
||||
ret = hypfs_write(entry, guest_handle_const_cast(arg3, void), arg4);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -26,6 +26,11 @@
|
||||
type *_x = (hnd).p; \
|
||||
(XEN_GUEST_HANDLE_PARAM(type)) { _x }; \
|
||||
})
|
||||
/* Same for casting to a const type. */
|
||||
#define guest_handle_const_cast(hnd, type) ({ \
|
||||
const type *p_ = (hnd).p; \
|
||||
(XEN_GUEST_HANDLE_PARAM(const_##type)) { p_ }; \
|
||||
})
|
||||
|
||||
/* Cast a XEN_GUEST_HANDLE to XEN_GUEST_HANDLE_PARAM */
|
||||
#define guest_handle_to_param(hnd, type) ({ \
|
||||
|
||||
@@ -38,7 +38,7 @@ struct hypfs_funcs {
|
||||
int (*read)(const struct hypfs_entry *entry,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr);
|
||||
int (*write)(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen);
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr, unsigned int ulen);
|
||||
unsigned int (*getsize)(const struct hypfs_entry *entry);
|
||||
struct hypfs_entry *(*findentry)(const struct hypfs_entry_dir *dir,
|
||||
const char *name, unsigned int name_len);
|
||||
@@ -154,13 +154,17 @@ int hypfs_read_dir(const struct hypfs_entry *entry,
|
||||
int hypfs_read_leaf(const struct hypfs_entry *entry,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr);
|
||||
int hypfs_write_deny(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen);
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen);
|
||||
int hypfs_write_leaf(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen);
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen);
|
||||
int hypfs_write_bool(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen);
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen);
|
||||
int hypfs_write_custom(struct hypfs_entry_leaf *leaf,
|
||||
XEN_GUEST_HANDLE_PARAM(void) uaddr, unsigned int ulen);
|
||||
XEN_GUEST_HANDLE_PARAM(const_void) uaddr,
|
||||
unsigned int ulen);
|
||||
unsigned int hypfs_getsize(const struct hypfs_entry *entry);
|
||||
struct hypfs_entry *hypfs_leaf_findentry(const struct hypfs_entry_dir *dir,
|
||||
const char *name,
|
||||
|
||||