greybus: explicitly mark cookies as opaque
Use simple macros to mark the conversion of an URB pointer into an
opaque cookie value (and vice-versa). We scramble some bits, but
the main point is to make it explicit where we're returning and
using opaque values.
Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/greybus/es1-ap-usb.c b/drivers/staging/greybus/es1-ap-usb.c
index 3404dc5..658506d 100644
--- a/drivers/staging/greybus/es1-ap-usb.c
+++ b/drivers/staging/greybus/es1-ap-usb.c
@@ -16,6 +16,13 @@
#include "svc_msg.h"
#include "kernel_ver.h"
+/*
+ * Macros for making pointers explicitly opaque, such that the result
+ * isn't valid but also can't be mistaken for an ERR_PTR() value.
+ */
+#define conceal_urb(urb) ((void *)((uintptr_t)(urb) ^ 0xbad))
+#define reveal_urb(cookie) ((void *)((uintptr_t)(cookie) ^ 0xbad))
+
/* Memory sizes for the buffers sent to/from the ES1 controller */
#define ES1_SVC_MSG_SIZE (sizeof(struct svc_msg) + SZ_64K)
#define ES1_GBUF_MSG_SIZE PAGE_SIZE
@@ -241,12 +248,12 @@
return ERR_PTR(retval);
}
- return urb;
+ return conceal_urb(urb);
}
static void buffer_cancel(void *cookie)
{
- struct urb *urb = cookie;
+ struct urb *urb = reveal_urb(cookie);
/*
* We really should be defensive and track all outstanding