| .. | .. |
|---|
| 69 | 69 | # define RPCDBG_FACILITY RPCDBG_AUTH |
|---|
| 70 | 70 | #endif |
|---|
| 71 | 71 | |
|---|
| 72 | | -DEFINE_SPINLOCK(krb5_seq_lock); |
|---|
| 73 | | - |
|---|
| 74 | 72 | static void * |
|---|
| 75 | 73 | setup_token(struct krb5_ctx *ctx, struct xdr_netobj *token) |
|---|
| 76 | 74 | { |
|---|
| .. | .. |
|---|
| 133 | 131 | struct xdr_netobj md5cksum = {.len = sizeof(cksumdata), |
|---|
| 134 | 132 | .data = cksumdata}; |
|---|
| 135 | 133 | void *ptr; |
|---|
| 136 | | - s32 now; |
|---|
| 134 | + time64_t now; |
|---|
| 137 | 135 | u32 seq_send; |
|---|
| 138 | 136 | u8 *cksumkey; |
|---|
| 139 | 137 | |
|---|
| 140 | 138 | dprintk("RPC: %s\n", __func__); |
|---|
| 141 | 139 | BUG_ON(ctx == NULL); |
|---|
| 142 | 140 | |
|---|
| 143 | | - now = get_seconds(); |
|---|
| 141 | + now = ktime_get_real_seconds(); |
|---|
| 144 | 142 | |
|---|
| 145 | 143 | ptr = setup_token(ctx, token); |
|---|
| 146 | 144 | |
|---|
| .. | .. |
|---|
| 155 | 153 | |
|---|
| 156 | 154 | memcpy(ptr + GSS_KRB5_TOK_HDR_LEN, md5cksum.data, md5cksum.len); |
|---|
| 157 | 155 | |
|---|
| 158 | | - spin_lock(&krb5_seq_lock); |
|---|
| 159 | | - seq_send = ctx->seq_send++; |
|---|
| 160 | | - spin_unlock(&krb5_seq_lock); |
|---|
| 156 | + seq_send = atomic_fetch_inc(&ctx->seq_send); |
|---|
| 161 | 157 | |
|---|
| 162 | 158 | if (krb5_make_seq_num(ctx, ctx->seq, ctx->initiate ? 0 : 0xff, |
|---|
| 163 | 159 | seq_send, ptr + GSS_KRB5_TOK_HDR_LEN, ptr + 8)) |
|---|
| .. | .. |
|---|
| 174 | 170 | struct xdr_netobj cksumobj = { .len = sizeof(cksumdata), |
|---|
| 175 | 171 | .data = cksumdata}; |
|---|
| 176 | 172 | void *krb5_hdr; |
|---|
| 177 | | - s32 now; |
|---|
| 178 | | - u64 seq_send; |
|---|
| 173 | + time64_t now; |
|---|
| 179 | 174 | u8 *cksumkey; |
|---|
| 180 | 175 | unsigned int cksum_usage; |
|---|
| 181 | 176 | __be64 seq_send_be64; |
|---|
| .. | .. |
|---|
| 186 | 181 | |
|---|
| 187 | 182 | /* Set up the sequence number. Now 64-bits in clear |
|---|
| 188 | 183 | * text and w/o direction indicator */ |
|---|
| 189 | | - spin_lock(&krb5_seq_lock); |
|---|
| 190 | | - seq_send = ctx->seq_send64++; |
|---|
| 191 | | - spin_unlock(&krb5_seq_lock); |
|---|
| 192 | | - |
|---|
| 193 | | - seq_send_be64 = cpu_to_be64(seq_send); |
|---|
| 184 | + seq_send_be64 = cpu_to_be64(atomic64_fetch_inc(&ctx->seq_send64)); |
|---|
| 194 | 185 | memcpy(krb5_hdr + 8, (char *) &seq_send_be64, 8); |
|---|
| 195 | 186 | |
|---|
| 196 | 187 | if (ctx->initiate) { |
|---|
| .. | .. |
|---|
| 207 | 198 | |
|---|
| 208 | 199 | memcpy(krb5_hdr + GSS_KRB5_TOK_HDR_LEN, cksumobj.data, cksumobj.len); |
|---|
| 209 | 200 | |
|---|
| 210 | | - now = get_seconds(); |
|---|
| 201 | + now = ktime_get_real_seconds(); |
|---|
| 211 | 202 | |
|---|
| 212 | 203 | return (ctx->endtime < now) ? GSS_S_CONTEXT_EXPIRED : GSS_S_COMPLETE; |
|---|
| 213 | 204 | } |
|---|
| .. | .. |
|---|
| 223 | 214 | BUG(); |
|---|
| 224 | 215 | case ENCTYPE_DES_CBC_RAW: |
|---|
| 225 | 216 | case ENCTYPE_DES3_CBC_RAW: |
|---|
| 226 | | - case ENCTYPE_ARCFOUR_HMAC: |
|---|
| 227 | 217 | return gss_get_mic_v1(ctx, text, token); |
|---|
| 228 | 218 | case ENCTYPE_AES128_CTS_HMAC_SHA1_96: |
|---|
| 229 | 219 | case ENCTYPE_AES256_CTS_HMAC_SHA1_96: |
|---|