diff --git a/0001-Replace-struct-siginfo-with-siginfo_t.patch b/0001-Replace-struct-siginfo-with-siginfo_t.patch
new file mode 100644
index 0000000..08948fe
--- /dev/null
+++ b/0001-Replace-struct-siginfo-with-siginfo_t.patch
@@ -0,0 +1,70 @@
+From baf954154e7c0acda038c01a5c28aea4db7eec67 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 5 Jul 2012 14:28:03 +0100
+Subject: [PATCH] Replace 'struct siginfo' with 'siginfo_t'.
+
+glibc 2.16 will remove the undocumented definition of 'struct siginfo'
+from <bits/siginfo.h>.
+
+This change is already present in glibc 2.15.90, so qemu compilation
+of certain targets (eg. cris-user) breaks.
+
+This struct was always typedef'd to be the same as 'siginfo_t' which
+is what POSIX documents, so use that instead.
+
+Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
+---
+ linux-user/signal.c |    8 ++++----
+ user-exec.c         |    2 +-
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/linux-user/signal.c b/linux-user/signal.c
+index 43346dc..108dff9 100644
+--- a/linux-user/signal.c
++++ b/linux-user/signal.c
+@@ -2849,7 +2849,7 @@ static void setup_rt_frame(int sig, struct target_sigaction *ka,
+     * Arguments to signal handler:
+     *
+     *   a0 = signal number
+-    *   a1 = pointer to struct siginfo
++    *   a1 = pointer to siginfo_t
+     *   a2 = pointer to struct ucontext
+     *
+     * $25 and PC point to the signal handler, $29 points to the
+@@ -3255,7 +3255,7 @@ struct target_signal_frame {
+ };
+ 
+ struct rt_signal_frame {
+-    struct siginfo info;
++    siginfo_t info;
+     struct ucontext uc;
+     uint32_t tramp[2];
+ };
+@@ -3474,9 +3474,9 @@ struct target_signal_frame {
+ };
+ 
+ struct rt_signal_frame {
+-        struct siginfo *pinfo;
++        siginfo_t *pinfo;
+         void *puc;
+-        struct siginfo info;
++        siginfo_t info;
+         struct ucontext uc;
+         uint8_t retcode[8];       /* Trampoline code. */
+ };
+diff --git a/user-exec.c b/user-exec.c
+index b2a4261..1a9c276 100644
+--- a/user-exec.c
++++ b/user-exec.c
+@@ -588,7 +588,7 @@ int cpu_signal_handler(int host_signum, void *pinfo,
+ int cpu_signal_handler(int host_signum, void *pinfo,
+                        void *puc)
+ {
+-    struct siginfo *info = pinfo;
++    siginfo_t *info = pinfo;
+     struct ucontext *uc = puc;
+     unsigned long pc = uc->uc_mcontext.sc_iaoq[0];
+     uint32_t insn = *(uint32_t *)pc;
+-- 
+1.7.10.4
+
diff --git a/qemu-kvm-1.1.0-siginfo_t.patch b/qemu-kvm-1.1.0-siginfo_t.patch
deleted file mode 100644
index 9c27946..0000000
--- a/qemu-kvm-1.1.0-siginfo_t.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- qemu-kvm-1.1.0/linux-user/signal.c	2012-06-30 03:14:15.000000000 +0100
-+++ qemu-kvm-1.1.0.glibc/linux-user/signal.c	2012-07-05 11:08:36.839294266 +0100
-@@ -3476,7 +3476,7 @@
- struct rt_signal_frame {
-         struct siginfo *pinfo;
-         void *puc;
--        struct siginfo info;
-+        siginfo_t info;
-         struct ucontext uc;
-         uint8_t retcode[8];       /* Trampoline code. */
- };
diff --git a/qemu.spec b/qemu.spec
index c77a9a8..e40ad9f 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -82,9 +82,9 @@ Patch2:   0002-qemu-kvm-virtio-Do-not-register-mask-notifiers-witho.patch
 # Speculative patch to fix msi and virtio-pci modules in build (not upstream).
 Patch3:   0001-buildsys-Move-msi-x-and-virtio-pci-from-Makefile.obj.patch
 
-# Hack to use siginfo_t instead of siginfo with glibc from Rawhide.
-# XXX This patch is highly UNlikely to be correct. (RWMJ)
-Patch4:   qemu-kvm-1.1.0-siginfo_t.patch
+# Use siginfo_t instead of struct siginfo, for glibc in Rawhide.
+# Sent upstream 2012-07-05.
+Patch4:   0001-Replace-struct-siginfo-with-siginfo_t.patch
 
 # The infamous chardev flow control patches
 Patch101: 0101-char-Split-out-tcp-socket-close-code-in-a-separate-f.patch