This source file includes following definitions.
- key_mask_hash
 
- key_r5_hash
 
- key_test_hash
 
- ino_key_init
 
- ino_key_init_flash
 
- lowest_ino_key
 
- highest_ino_key
 
- dent_key_init
 
- dent_key_init_hash
 
- dent_key_init_flash
 
- lowest_dent_key
 
- xent_key_init
 
- xent_key_init_flash
 
- lowest_xent_key
 
- data_key_init
 
- highest_data_key
 
- trun_key_init
 
- invalid_key_init
 
- key_type
 
- key_type_flash
 
- key_inum
 
- key_inum_flash
 
- key_hash
 
- key_hash_flash
 
- key_block
 
- key_block_flash
 
- key_read
 
- key_write
 
- key_write_idx
 
- key_copy
 
- keys_cmp
 
- keys_eq
 
- is_hash_key
 
- key_max_inode_size
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 #ifndef __UBIFS_KEY_H__
  32 #define __UBIFS_KEY_H__
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 static inline uint32_t key_mask_hash(uint32_t hash)
  43 {
  44         hash &= UBIFS_S_KEY_HASH_MASK;
  45         if (unlikely(hash <= 2))
  46                 hash += 3;
  47         return hash;
  48 }
  49 
  50 
  51 
  52 
  53 
  54 
  55 static inline uint32_t key_r5_hash(const char *s, int len)
  56 {
  57         uint32_t a = 0;
  58         const signed char *str = (const signed char *)s;
  59 
  60         while (len--) {
  61                 a += *str << 4;
  62                 a += *str >> 4;
  63                 a *= 11;
  64                 str++;
  65         }
  66 
  67         return key_mask_hash(a);
  68 }
  69 
  70 
  71 
  72 
  73 
  74 
  75 static inline uint32_t key_test_hash(const char *str, int len)
  76 {
  77         uint32_t a = 0;
  78 
  79         len = min_t(uint32_t, len, 4);
  80         memcpy(&a, str, len);
  81         return key_mask_hash(a);
  82 }
  83 
  84 
  85 
  86 
  87 
  88 
  89 
  90 static inline void ino_key_init(const struct ubifs_info *c,
  91                                 union ubifs_key *key, ino_t inum)
  92 {
  93         key->u32[0] = inum;
  94         key->u32[1] = UBIFS_INO_KEY << UBIFS_S_KEY_BLOCK_BITS;
  95 }
  96 
  97 
  98 
  99 
 100 
 101 
 102 
 103 static inline void ino_key_init_flash(const struct ubifs_info *c, void *k,
 104                                       ino_t inum)
 105 {
 106         union ubifs_key *key = k;
 107 
 108         key->j32[0] = cpu_to_le32(inum);
 109         key->j32[1] = cpu_to_le32(UBIFS_INO_KEY << UBIFS_S_KEY_BLOCK_BITS);
 110         memset(k + 8, 0, UBIFS_MAX_KEY_LEN - 8);
 111 }
 112 
 113 
 114 
 115 
 116 
 117 
 118 
 119 static inline void lowest_ino_key(const struct ubifs_info *c,
 120                                 union ubifs_key *key, ino_t inum)
 121 {
 122         key->u32[0] = inum;
 123         key->u32[1] = 0;
 124 }
 125 
 126 
 127 
 128 
 129 
 130 
 131 
 132 static inline void highest_ino_key(const struct ubifs_info *c,
 133                                 union ubifs_key *key, ino_t inum)
 134 {
 135         key->u32[0] = inum;
 136         key->u32[1] = 0xffffffff;
 137 }
 138 
 139 
 140 
 141 
 142 
 143 
 144 
 145 
 146 static inline void dent_key_init(const struct ubifs_info *c,
 147                                  union ubifs_key *key, ino_t inum,
 148                                  const struct fscrypt_name *nm)
 149 {
 150         uint32_t hash = c->key_hash(fname_name(nm), fname_len(nm));
 151 
 152         ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
 153         ubifs_assert(c, !nm->hash && !nm->minor_hash);
 154         key->u32[0] = inum;
 155         key->u32[1] = hash | (UBIFS_DENT_KEY << UBIFS_S_KEY_HASH_BITS);
 156 }
 157 
 158 
 159 
 160 
 161 
 162 
 163 
 164 
 165 
 166 static inline void dent_key_init_hash(const struct ubifs_info *c,
 167                                       union ubifs_key *key, ino_t inum,
 168                                       uint32_t hash)
 169 {
 170         ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
 171         key->u32[0] = inum;
 172         key->u32[1] = hash | (UBIFS_DENT_KEY << UBIFS_S_KEY_HASH_BITS);
 173 }
 174 
 175 
 176 
 177 
 178 
 179 
 180 
 181 
 182 static inline void dent_key_init_flash(const struct ubifs_info *c, void *k,
 183                                        ino_t inum,
 184                                        const struct fscrypt_name *nm)
 185 {
 186         union ubifs_key *key = k;
 187         uint32_t hash = c->key_hash(fname_name(nm), fname_len(nm));
 188 
 189         ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
 190         key->j32[0] = cpu_to_le32(inum);
 191         key->j32[1] = cpu_to_le32(hash |
 192                                   (UBIFS_DENT_KEY << UBIFS_S_KEY_HASH_BITS));
 193         memset(k + 8, 0, UBIFS_MAX_KEY_LEN - 8);
 194 }
 195 
 196 
 197 
 198 
 199 
 200 
 201 
 202 static inline void lowest_dent_key(const struct ubifs_info *c,
 203                                    union ubifs_key *key, ino_t inum)
 204 {
 205         key->u32[0] = inum;
 206         key->u32[1] = UBIFS_DENT_KEY << UBIFS_S_KEY_HASH_BITS;
 207 }
 208 
 209 
 210 
 211 
 212 
 213 
 214 
 215 
 216 static inline void xent_key_init(const struct ubifs_info *c,
 217                                  union ubifs_key *key, ino_t inum,
 218                                  const struct fscrypt_name *nm)
 219 {
 220         uint32_t hash = c->key_hash(fname_name(nm), fname_len(nm));
 221 
 222         ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
 223         key->u32[0] = inum;
 224         key->u32[1] = hash | (UBIFS_XENT_KEY << UBIFS_S_KEY_HASH_BITS);
 225 }
 226 
 227 
 228 
 229 
 230 
 231 
 232 
 233 
 234 static inline void xent_key_init_flash(const struct ubifs_info *c, void *k,
 235                                        ino_t inum, const struct fscrypt_name *nm)
 236 {
 237         union ubifs_key *key = k;
 238         uint32_t hash = c->key_hash(fname_name(nm), fname_len(nm));
 239 
 240         ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
 241         key->j32[0] = cpu_to_le32(inum);
 242         key->j32[1] = cpu_to_le32(hash |
 243                                   (UBIFS_XENT_KEY << UBIFS_S_KEY_HASH_BITS));
 244         memset(k + 8, 0, UBIFS_MAX_KEY_LEN - 8);
 245 }
 246 
 247 
 248 
 249 
 250 
 251 
 252 
 253 static inline void lowest_xent_key(const struct ubifs_info *c,
 254                                    union ubifs_key *key, ino_t inum)
 255 {
 256         key->u32[0] = inum;
 257         key->u32[1] = UBIFS_XENT_KEY << UBIFS_S_KEY_HASH_BITS;
 258 }
 259 
 260 
 261 
 262 
 263 
 264 
 265 
 266 
 267 static inline void data_key_init(const struct ubifs_info *c,
 268                                  union ubifs_key *key, ino_t inum,
 269                                  unsigned int block)
 270 {
 271         ubifs_assert(c, !(block & ~UBIFS_S_KEY_BLOCK_MASK));
 272         key->u32[0] = inum;
 273         key->u32[1] = block | (UBIFS_DATA_KEY << UBIFS_S_KEY_BLOCK_BITS);
 274 }
 275 
 276 
 277 
 278 
 279 
 280 
 281 
 282 static inline void highest_data_key(const struct ubifs_info *c,
 283                                    union ubifs_key *key, ino_t inum)
 284 {
 285         data_key_init(c, key, inum, UBIFS_S_KEY_BLOCK_MASK);
 286 }
 287 
 288 
 289 
 290 
 291 
 292 
 293 
 294 
 295 
 296 
 297 static inline void trun_key_init(const struct ubifs_info *c,
 298                                  union ubifs_key *key, ino_t inum)
 299 {
 300         key->u32[0] = inum;
 301         key->u32[1] = UBIFS_TRUN_KEY << UBIFS_S_KEY_BLOCK_BITS;
 302 }
 303 
 304 
 305 
 306 
 307 
 308 
 309 
 310 
 311 static inline void invalid_key_init(const struct ubifs_info *c,
 312                                     union ubifs_key *key)
 313 {
 314         key->u32[0] = 0xDEADBEAF;
 315         key->u32[1] = UBIFS_INVALID_KEY;
 316 }
 317 
 318 
 319 
 320 
 321 
 322 
 323 static inline int key_type(const struct ubifs_info *c,
 324                            const union ubifs_key *key)
 325 {
 326         return key->u32[1] >> UBIFS_S_KEY_BLOCK_BITS;
 327 }
 328 
 329 
 330 
 331 
 332 
 333 
 334 static inline int key_type_flash(const struct ubifs_info *c, const void *k)
 335 {
 336         const union ubifs_key *key = k;
 337 
 338         return le32_to_cpu(key->j32[1]) >> UBIFS_S_KEY_BLOCK_BITS;
 339 }
 340 
 341 
 342 
 343 
 344 
 345 
 346 static inline ino_t key_inum(const struct ubifs_info *c, const void *k)
 347 {
 348         const union ubifs_key *key = k;
 349 
 350         return key->u32[0];
 351 }
 352 
 353 
 354 
 355 
 356 
 357 
 358 static inline ino_t key_inum_flash(const struct ubifs_info *c, const void *k)
 359 {
 360         const union ubifs_key *key = k;
 361 
 362         return le32_to_cpu(key->j32[0]);
 363 }
 364 
 365 
 366 
 367 
 368 
 369 
 370 static inline uint32_t key_hash(const struct ubifs_info *c,
 371                                 const union ubifs_key *key)
 372 {
 373         return key->u32[1] & UBIFS_S_KEY_HASH_MASK;
 374 }
 375 
 376 
 377 
 378 
 379 
 380 
 381 static inline uint32_t key_hash_flash(const struct ubifs_info *c, const void *k)
 382 {
 383         const union ubifs_key *key = k;
 384 
 385         return le32_to_cpu(key->j32[1]) & UBIFS_S_KEY_HASH_MASK;
 386 }
 387 
 388 
 389 
 390 
 391 
 392 
 393 static inline unsigned int key_block(const struct ubifs_info *c,
 394                                      const union ubifs_key *key)
 395 {
 396         return key->u32[1] & UBIFS_S_KEY_BLOCK_MASK;
 397 }
 398 
 399 
 400 
 401 
 402 
 403 
 404 static inline unsigned int key_block_flash(const struct ubifs_info *c,
 405                                            const void *k)
 406 {
 407         const union ubifs_key *key = k;
 408 
 409         return le32_to_cpu(key->j32[1]) & UBIFS_S_KEY_BLOCK_MASK;
 410 }
 411 
 412 
 413 
 414 
 415 
 416 
 417 
 418 static inline void key_read(const struct ubifs_info *c, const void *from,
 419                             union ubifs_key *to)
 420 {
 421         const union ubifs_key *f = from;
 422 
 423         to->u32[0] = le32_to_cpu(f->j32[0]);
 424         to->u32[1] = le32_to_cpu(f->j32[1]);
 425 }
 426 
 427 
 428 
 429 
 430 
 431 
 432 
 433 static inline void key_write(const struct ubifs_info *c,
 434                              const union ubifs_key *from, void *to)
 435 {
 436         union ubifs_key *t = to;
 437 
 438         t->j32[0] = cpu_to_le32(from->u32[0]);
 439         t->j32[1] = cpu_to_le32(from->u32[1]);
 440         memset(to + 8, 0, UBIFS_MAX_KEY_LEN - 8);
 441 }
 442 
 443 
 444 
 445 
 446 
 447 
 448 
 449 static inline void key_write_idx(const struct ubifs_info *c,
 450                                  const union ubifs_key *from, void *to)
 451 {
 452         union ubifs_key *t = to;
 453 
 454         t->j32[0] = cpu_to_le32(from->u32[0]);
 455         t->j32[1] = cpu_to_le32(from->u32[1]);
 456 }
 457 
 458 
 459 
 460 
 461 
 462 
 463 
 464 static inline void key_copy(const struct ubifs_info *c,
 465                             const union ubifs_key *from, union ubifs_key *to)
 466 {
 467         to->u64[0] = from->u64[0];
 468 }
 469 
 470 
 471 
 472 
 473 
 474 
 475 
 476 
 477 
 478 
 479 static inline int keys_cmp(const struct ubifs_info *c,
 480                            const union ubifs_key *key1,
 481                            const union ubifs_key *key2)
 482 {
 483         if (key1->u32[0] < key2->u32[0])
 484                 return -1;
 485         if (key1->u32[0] > key2->u32[0])
 486                 return 1;
 487         if (key1->u32[1] < key2->u32[1])
 488                 return -1;
 489         if (key1->u32[1] > key2->u32[1])
 490                 return 1;
 491 
 492         return 0;
 493 }
 494 
 495 
 496 
 497 
 498 
 499 
 500 
 501 
 502 
 503 
 504 static inline int keys_eq(const struct ubifs_info *c,
 505                           const union ubifs_key *key1,
 506                           const union ubifs_key *key2)
 507 {
 508         if (key1->u32[0] != key2->u32[0])
 509                 return 0;
 510         if (key1->u32[1] != key2->u32[1])
 511                 return 0;
 512         return 1;
 513 }
 514 
 515 
 516 
 517 
 518 
 519 
 520 
 521 
 522 static inline int is_hash_key(const struct ubifs_info *c,
 523                               const union ubifs_key *key)
 524 {
 525         int type = key_type(c, key);
 526 
 527         return type == UBIFS_DENT_KEY || type == UBIFS_XENT_KEY;
 528 }
 529 
 530 
 531 
 532 
 533 
 534 static inline unsigned long long key_max_inode_size(const struct ubifs_info *c)
 535 {
 536         switch (c->key_fmt) {
 537         case UBIFS_SIMPLE_KEY_FMT:
 538                 return (1ULL << UBIFS_S_KEY_BLOCK_BITS) * UBIFS_BLOCK_SIZE;
 539         default:
 540                 return 0;
 541         }
 542 }
 543 
 544 #endif