summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-06-12 04:41:10 +0200
committerJunfeng Dong <junfeng.dong@intel.com>2013-11-19 18:57:37 +0800
commita0e5915d9201986c22372dcdf418d686490cfc04 (patch)
tree45583f6d9ab3c98390c043d0cbf3be540f17d814
parentc3d7c3bb732915e93a00d556c76340fce835e2ad (diff)
downloadqemu-a0e5915d9201986c22372dcdf418d686490cfc04.tar.gz
qemu-a0e5915d9201986c22372dcdf418d686490cfc04.tar.bz2
qemu-a0e5915d9201986c22372dcdf418d686490cfc04.zip
linux-user: Ignore broken loop ioctl
During invocations of losetup, we run into an ioctl that doesn't exist. However, because of that we output an error, which then screws up the kiwi logic around that call. So let's silently ignore that bogus ioctl. Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--linux-user/ioctls.h1
-rw-r--r--linux-user/linux_loop.h1
-rw-r--r--linux-user/syscall.c7
-rw-r--r--linux-user/syscall_defs.h1
4 files changed, 10 insertions, 0 deletions
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 28dc0b2e4..da4f12c7b 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -326,6 +326,7 @@
IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
IOCTL(LOOP_GET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT)
+ IOCTL_SPECIAL(LOOP_BOGUS_CMD, 0, do_ioctl_fail, TYPE_INT)
IOCTL(MTIOCTOP, IOC_W, MK_PTR(MK_STRUCT(STRUCT_mtop)))
IOCTL(MTIOCGET, IOC_R, MK_PTR(MK_STRUCT(STRUCT_mtget)))
diff --git a/linux-user/linux_loop.h b/linux-user/linux_loop.h
index 8974caa9d..810ae616e 100644
--- a/linux-user/linux_loop.h
+++ b/linux-user/linux_loop.h
@@ -91,5 +91,6 @@ struct loop_info64 {
#define LOOP_SET_STATUS64 0x4C04
#define LOOP_GET_STATUS64 0x4C05
#define LOOP_CHANGE_FD 0x4C06
+#define LOOP_BOGUS_CMD 0x4C82
#endif
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 628fe664d..38ca7af2e 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -3626,6 +3626,13 @@ static abi_long do_ioctl_rt(const IOCTLEntry *ie, uint8_t *buf_temp,
return ret;
}
+static abi_long do_ioctl_fail(const IOCTLEntry *ie, uint8_t *buf_temp, int fd,
+ abi_long cmd, abi_long arg)
+{
+ /* Fail silently */
+ return -EINVAL;
+}
+
static IOCTLEntry ioctl_entries[] = {
#define IOCTL(cmd, access, ...) \
{ TARGET_ ## cmd, cmd, #cmd, access, 0, { __VA_ARGS__ } },
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index a8aba1b31..bb837720f 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -1020,6 +1020,7 @@ struct target_pollfd {
#define TARGET_LOOP_SET_STATUS64 0x4C04
#define TARGET_LOOP_GET_STATUS64 0x4C05
#define TARGET_LOOP_CHANGE_FD 0x4C06
+#define TARGET_LOOP_BOGUS_CMD 0x4C82
/* fb ioctls */
#define TARGET_FBIOGET_VSCREENINFO 0x4600