};
#define GSS_SOCKET_PATH "/tmp/svcgssd.socket"
-#define RSI_DOWNCALL_MAGIC 0x6d6dd62a
+/*
+ * Old RSI_DOWNCALL_MAGIC was:
+ * #define RSI_DOWNCALL_MAGIC 0x6d6dd62a
+ *
+ * This is an uapi and to catch cases like kernel modules
+ * being updated separately from user tools new
+ * RSI_DOWNCALL_MAGIC(0x6d6dd63a) was introduced
+ */
+#define RSI_DOWNCALL_MAGIC 0x6d6dd63a
#define RSI_DOWNCALL_PATH "sptlrpc/gss/rsi_info"
#define RSI_CACHE_NAME "rsicache"
struct rsi_downcall_data {
__u32 sid_magic;
__u32 sid_err;
- __u32 sid_hash;
+ __u32 sid_unused;
__u32 sid_maj_stat;
__u32 sid_min_stat;
__u32 sid_len;
__s64 sid_offset;
+ __u64 sid_hash;
/* sid_val contains in_handle, in_token,
* out_handle, out_token
*/
#endif /* HAVE_SERVER_SUPPORT */
/* Checks for struct rsi_downcall_data */
- LASSERTF((int)sizeof(struct rsi_downcall_data) == 32, "found %lld\n",
+ LASSERTF((int)sizeof(struct rsi_downcall_data) == 40, "found %lld\n",
(long long)(int)sizeof(struct rsi_downcall_data));
LASSERTF((int)offsetof(struct rsi_downcall_data, sid_magic) == 0, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_magic));
(long long)(int)offsetof(struct rsi_downcall_data, sid_err));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_err) == 4, "found %lld\n",
(long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_err));
- LASSERTF((int)offsetof(struct rsi_downcall_data, sid_hash) == 8, "found %lld\n",
- (long long)(int)offsetof(struct rsi_downcall_data, sid_hash));
- LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_hash) == 4, "found %lld\n",
- (long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_hash));
+ LASSERTF((int)offsetof(struct rsi_downcall_data, sid_unused) == 8, "found %lld\n",
+ (long long)(int)offsetof(struct rsi_downcall_data, sid_unused));
+ LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_unused) == 4, "found %lld\n",
+ (long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_unused));
LASSERTF((int)offsetof(struct rsi_downcall_data, sid_maj_stat) == 12, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_maj_stat));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_maj_stat) == 4, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_offset));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_offset) == 8, "found %lld\n",
(long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_offset));
- LASSERTF((int)offsetof(struct rsi_downcall_data, sid_val) == 32, "found %lld\n",
+ LASSERTF((int)offsetof(struct rsi_downcall_data, sid_hash) == 32, "found %lld\n",
+ (long long)(int)offsetof(struct rsi_downcall_data, sid_hash));
+ LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_hash) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_hash));
+ LASSERTF((int)offsetof(struct rsi_downcall_data, sid_val) == 40, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_val));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_val) == 0, "found %lld\n",
(long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_val));
#define RPCSEC_GSS_SEQ_WIN 5
-static int send_response(int auth_res, uint64_t hash,
+static int send_response(int auth_res, __u64 hash,
gss_buffer_desc *in_handle, gss_buffer_desc *in_token,
u_int32_t maj_stat, u_int32_t min_stat,
gss_buffer_desc *out_handle, gss_buffer_desc *out_token)
.maj_stat = GSS_S_FAILURE,
.ctx = GSS_C_NO_CONTEXT,
};
- uint64_t hash = 0;
+ __u64 hash = 0;
+ __u64 tmp_lustre_svc = 0;
printerr(LL_INFO, "handling request\n");
if (readline(fd, &lbuf, &lbuflen) != 1) {
cp = lbuf;
/* see rsi_do_upcall() for the format of data being input here */
- rc = gss_u64_read_string(&cp, (__u64 *)&hash);
+ rc = gss_u64_read_string(&cp, &hash);
if (rc < 0) {
printerr(LL_ERR, "ERROR: failed parsing request: hash\n");
goto out_err;
}
- rc = gss_u64_read_string(&cp, (__u64 *)&snd.lustre_svc);
+ rc = gss_u64_read_string(&cp, &tmp_lustre_svc);
if (rc < 0) {
printerr(LL_ERR, "ERROR: failed parsing request: lustre svc\n");
goto out_err;
}
+ snd.lustre_svc = tmp_lustre_svc;
/* lustre_svc is the svc and gss subflavor */
lustre_mech = (snd.lustre_svc & LUSTRE_GSS_MECH_MASK) >>
LUSTRE_GSS_MECH_SHIFT;
CHECK_STRUCT(rsi_downcall_data);
CHECK_MEMBER(rsi_downcall_data, sid_magic);
CHECK_MEMBER(rsi_downcall_data, sid_err);
- CHECK_MEMBER(rsi_downcall_data, sid_hash);
+ CHECK_MEMBER(rsi_downcall_data, sid_unused);
CHECK_MEMBER(rsi_downcall_data, sid_maj_stat);
CHECK_MEMBER(rsi_downcall_data, sid_min_stat);
CHECK_MEMBER(rsi_downcall_data, sid_len);
CHECK_MEMBER(rsi_downcall_data, sid_offset);
+ CHECK_MEMBER(rsi_downcall_data, sid_hash);
CHECK_MEMBER(rsi_downcall_data, sid_val);
}
#endif /* HAVE_SERVER_SUPPORT */
/* Checks for struct rsi_downcall_data */
- LASSERTF((int)sizeof(struct rsi_downcall_data) == 32, "found %lld\n",
+ LASSERTF((int)sizeof(struct rsi_downcall_data) == 40, "found %lld\n",
(long long)(int)sizeof(struct rsi_downcall_data));
LASSERTF((int)offsetof(struct rsi_downcall_data, sid_magic) == 0, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_magic));
(long long)(int)offsetof(struct rsi_downcall_data, sid_err));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_err) == 4, "found %lld\n",
(long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_err));
- LASSERTF((int)offsetof(struct rsi_downcall_data, sid_hash) == 8, "found %lld\n",
- (long long)(int)offsetof(struct rsi_downcall_data, sid_hash));
- LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_hash) == 4, "found %lld\n",
- (long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_hash));
+ LASSERTF((int)offsetof(struct rsi_downcall_data, sid_unused) == 8, "found %lld\n",
+ (long long)(int)offsetof(struct rsi_downcall_data, sid_unused));
+ LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_unused) == 4, "found %lld\n",
+ (long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_unused));
LASSERTF((int)offsetof(struct rsi_downcall_data, sid_maj_stat) == 12, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_maj_stat));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_maj_stat) == 4, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_offset));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_offset) == 8, "found %lld\n",
(long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_offset));
- LASSERTF((int)offsetof(struct rsi_downcall_data, sid_val) == 32, "found %lld\n",
+ LASSERTF((int)offsetof(struct rsi_downcall_data, sid_hash) == 32, "found %lld\n",
+ (long long)(int)offsetof(struct rsi_downcall_data, sid_hash));
+ LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_hash) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_hash));
+ LASSERTF((int)offsetof(struct rsi_downcall_data, sid_val) == 40, "found %lld\n",
(long long)(int)offsetof(struct rsi_downcall_data, sid_val));
LASSERTF((int)sizeof(((struct rsi_downcall_data *)0)->sid_val) == 0, "found %lld\n",
(long long)(int)sizeof(((struct rsi_downcall_data *)0)->sid_val));