1 /* 2 * linux/fs/reiserfs/xattr.c 3 * 4 * Copyright (c) 2002 by Jeff Mahoney, <jeffm@suse.com> 5 * 6 */ 7 8 /* 9 * In order to implement EA/ACLs in a clean, backwards compatible manner, 10 * they are implemented as files in a "private" directory. 11 * Each EA is in it's own file, with the directory layout like so (/ is assumed 12 * to be relative to fs root). Inside the /.reiserfs_priv/xattrs directory, 13 * directories named using the capital-hex form of the objectid and 14 * generation number are used. Inside each directory are individual files 15 * named with the name of the extended attribute. 16 * 17 * So, for objectid 12648430, we could have: 18 * /.reiserfs_priv/xattrs/C0FFEE.0/system.posix_acl_access 19 * /.reiserfs_priv/xattrs/C0FFEE.0/system.posix_acl_default 20 * /.reiserfs_priv/xattrs/C0FFEE.0/user.Content-Type 21 * .. or similar. 22 * 23 * The file contents are the text of the EA. The size is known based on the 24 * stat data describing the file. 25 * 26 * In the case of system.posix_acl_access and system.posix_acl_default, since 27 * these are special cases for filesystem ACLs, they are interpreted by the 28 * kernel, in addition, they are negatively and positively cached and attached 29 * to the inode so that unnecessary lookups are avoided. 30 * 31 * Locking works like so: 32 * Directory components (xattr root, xattr dir) are protectd by their i_mutex. 33 * The xattrs themselves are protected by the xattr_sem. 34 */ 35 36 #include <linux/reiserfs_fs.h> 37 #include <linux/capability.h> 38 #include <linux/dcache.h> 39 #include <linux/namei.h> 40 #include <linux/errno.h> 41 #include <linux/fs.h> 42 #include <linux/file.h> 43 #include <linux/pagemap.h> 44 #include <linux/xattr.h> 45 #include <linux/reiserfs_xattr.h> 46 #include <linux/reiserfs_acl.h> 47 #include <asm/uaccess.h> 48 #include <net/checksum.h> 49 #include <linux/stat.h> 50 #include <linux/quotaops.h> 51 52 #define PRIVROOT_NAME ".reiserfs_priv" 53 #define XAROOT_NAME "xattrs" 54 55 56 /* Helpers for inode ops. We do this so that we don't have all the VFS 57 * overhead and also for proper i_mutex annotation. 58 * dir->i_mutex must be held for all of them. */ 59 #ifdef CONFIG_REISERFS_FS_XATTR 60 static int xattr_create(struct inode *dir, struct dentry *dentry, int mode) 61 { 62 BUG_ON(!mutex_is_locked(&dir->i_mutex)); 63 vfs_dq_init(dir); 64 return dir->i_op->create(dir, dentry, mode, NULL); 65 } 66 #endif 67 68 static int xattr_mkdir(struct inode *dir, struct dentry *dentry, int mode) 69 { 70 BUG_ON(!mutex_is_locked(&dir->i_mutex)); 71 vfs_dq_init(dir); 72 return dir->i_op->mkdir(dir, dentry, mode); 73 } 74 75 /* We use I_MUTEX_CHILD here to silence lockdep. It's safe because xattr 76 * mutation ops aren't called during rename or splace, which are the 77 * only other users of I_MUTEX_CHILD. It violates the ordering, but that's 78 * better than allocating another subclass just for this code. */ 79 static int xattr_unlink(struct inode *dir, struct dentry *dentry) 80 { 81 int error; 82 BUG_ON(!mutex_is_locked(&dir->i_mutex)); 83 vfs_dq_init(dir); 84 85 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD); 86 error = dir->i_op->unlink(dir, dentry); 87 mutex_unlock(&dentry->d_inode->i_mutex); 88 89 if (!error) 90 d_delete(dentry); 91 return error; 92 } 93 94 static int xattr_rmdir(struct inode *dir, struct dentry *dentry) 95 { 96 int error; 97 BUG_ON(!mutex_is_locked(&dir->i_mutex)); 98 vfs_dq_init(dir); 99 100 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD); 101 dentry_unhash(dentry); 102 error = dir->i_op->rmdir(dir, dentry); 103 if (!error) 104 dentry->d_inode->i_flags |= S_DEAD; 105 mutex_unlock(&dentry->d_inode->i_mutex); 106 if (!error) 107 d_delete(dentry); 108 dput(dentry); 109 110 return error; 111 } 112 113 #define xattr_may_create(flags) (!flags || flags & XATTR_CREATE) 114 115 static struct dentry *open_xa_root(struct super_block *sb, int flags) 116 { 117 struct dentry *privroot = REISERFS_SB(sb)->priv_root; 118 struct dentry *xaroot; 119 if (!privroot->d_inode) 120 return ERR_PTR(-ENODATA); 121 122 mutex_lock_nested(&privroot->d_inode->i_mutex, I_MUTEX_XATTR); 123 124 xaroot = dget(REISERFS_SB(sb)->xattr_root); 125 if (!xaroot) 126 xaroot = ERR_PTR(-ENODATA); 127 else if (!xaroot->d_inode) { 128 int err = -ENODATA; 129 if (xattr_may_create(flags)) 130 err = xattr_mkdir(privroot->d_inode, xaroot, 0700); 131 if (err) { 132 dput(xaroot); 133 xaroot = ERR_PTR(err); 134 } 135 } 136 137 mutex_unlock(&privroot->d_inode->i_mutex); 138 return xaroot; 139 } 140 141 static struct dentry *open_xa_dir(const struct inode *inode, int flags) 142 { 143 struct dentry *xaroot, *xadir; 144 char namebuf[17]; 145 146 xaroot = open_xa_root(inode->i_sb, flags); 147 if (IS_ERR(xaroot)) 148 return xaroot; 149 150 snprintf(namebuf, sizeof(namebuf), "%X.%X", 151 le32_to_cpu(INODE_PKEY(inode)->k_objectid), 152 inode->i_generation); 153 154 mutex_lock_nested(&xaroot->d_inode->i_mutex, I_MUTEX_XATTR); 155 156 xadir = lookup_one_len(namebuf, xaroot, strlen(namebuf)); 157 if (!IS_ERR(xadir) && !xadir->d_inode) { 158 int err = -ENODATA; 159 if (xattr_may_create(flags)) 160 err = xattr_mkdir(xaroot->d_inode, xadir, 0700); 161 if (err) { 162 dput(xadir); 163 xadir = ERR_PTR(err); 164 } 165 } 166 167 mutex_unlock(&xaroot->d_inode->i_mutex); 168 dput(xaroot); 169 return xadir; 170 } 171 172 /* The following are side effects of other operations that aren't explicitly 173 * modifying extended attributes. This includes operations such as permissions 174 * or ownership changes, object deletions, etc. */ 175 struct reiserfs_dentry_buf { 176 struct dentry *xadir; 177 int count; 178 struct dentry *dentries[8]; 179 }; 180 181 static int 182 fill_with_dentries(void *buf, const char *name, int namelen, loff_t offset, 183 u64 ino, unsigned int d_type) 184 { 185 struct reiserfs_dentry_buf *dbuf = buf; 186 struct dentry *dentry; 187 WARN_ON_ONCE(!mutex_is_locked(&dbuf->xadir->d_inode->i_mutex)); 188 189 if (dbuf->count == ARRAY_SIZE(dbuf->dentries)) 190 return -ENOSPC; 191 192 if (name[0] == '.' && (name[1] == '\0' || 193 (name[1] == '.' && name[2] == '\0'))) 194 return 0; 195 196 dentry = lookup_one_len(name, dbuf->xadir, namelen); 197 if (IS_ERR(dentry)) { 198 return PTR_ERR(dentry); 199 } else if (!dentry->d_inode) { 200 /* A directory entry exists, but no file? */ 201 reiserfs_error(dentry->d_sb, "xattr-20003", 202 "Corrupted directory: xattr %s listed but " 203 "not found for file %s.\n", 204 dentry->d_name.name, dbuf->xadir->d_name.name); 205 dput(dentry); 206 return -EIO; 207 } 208 209 dbuf->dentries[dbuf->count++] = dentry; 210 return 0; 211 } 212 213 static void 214 cleanup_dentry_buf(struct reiserfs_dentry_buf *buf) 215 { 216 int i; 217 for (i = 0; i < buf->count; i++) 218 if (buf->dentries[i]) 219 dput(buf->dentries[i]); 220 } 221 222 static int reiserfs_for_each_xattr(struct inode *inode, 223 int (*action)(struct dentry *, void *), 224 void *data) 225 { 226 struct dentry *dir; 227 int i, err = 0; 228 loff_t pos = 0; 229 struct reiserfs_dentry_buf buf = { 230 .count = 0, 231 }; 232 233 /* Skip out, an xattr has no xattrs associated with it */ 234 if (IS_PRIVATE(inode) || get_inode_sd_version(inode) == STAT_DATA_V1) 235 return 0; 236 237 dir = open_xa_dir(inode, XATTR_REPLACE); 238 if (IS_ERR(dir)) { 239 err = PTR_ERR(dir); 240 goto out; 241 } else if (!dir->d_inode) { 242 err = 0; 243 goto out_dir; 244 } 245 246 mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_XATTR); 247 buf.xadir = dir; 248 err = reiserfs_readdir_dentry(dir, &buf, fill_with_dentries, &pos); 249 while ((err == 0 || err == -ENOSPC) && buf.count) { 250 err = 0; 251 252 for (i = 0; i < buf.count && buf.dentries[i]; i++) { 253 int lerr = 0; 254 struct dentry *dentry = buf.dentries[i]; 255 256 if (err == 0 && !S_ISDIR(dentry->d_inode->i_mode)) 257 lerr = action(dentry, data); 258 259 dput(dentry); 260 buf.dentries[i] = NULL; 261 err = lerr ?: err; 262 } 263 buf.count = 0; 264 if (!err) 265 err = reiserfs_readdir_dentry(dir, &buf, 266 fill_with_dentries, &pos); 267 } 268 mutex_unlock(&dir->d_inode->i_mutex); 269 270 /* Clean up after a failed readdir */ 271 cleanup_dentry_buf(&buf); 272 273 if (!err) { 274 /* We start a transaction here to avoid a ABBA situation 275 * between the xattr root's i_mutex and the journal lock. 276 * This doesn't incur much additional overhead since the 277 * new transaction will just nest inside the 278 * outer transaction. */ 279 int blocks = JOURNAL_PER_BALANCE_CNT * 2 + 2 + 280 4 * REISERFS_QUOTA_TRANS_BLOCKS(inode->i_sb); 281 struct reiserfs_transaction_handle th; 282 err = journal_begin(&th, inode->i_sb, blocks); 283 if (!err) { 284 int jerror; 285 mutex_lock_nested(&dir->d_parent->d_inode->i_mutex, 286 I_MUTEX_XATTR); 287 err = action(dir, data); 288 jerror = journal_end(&th, inode->i_sb, blocks); 289 mutex_unlock(&dir->d_parent->d_inode->i_mutex); 290 err = jerror ?: err; 291 } 292 } 293 out_dir: 294 dput(dir); 295 out: 296 /* -ENODATA isn't an error */ 297 if (err == -ENODATA) 298 err = 0; 299 return err; 300 } 301 302 static int delete_one_xattr(struct dentry *dentry, void *data) 303 { 304 struct inode *dir = dentry->d_parent->d_inode; 305 306 /* This is the xattr dir, handle specially. */ 307 if (S_ISDIR(dentry->d_inode->i_mode)) 308 return xattr_rmdir(dir, dentry); 309 310 return xattr_unlink(dir, dentry); 311 } 312 313 static int chown_one_xattr(struct dentry *dentry, void *data) 314 { 315 struct iattr *attrs = data; 316 return reiserfs_setattr(dentry, attrs); 317 } 318 319 /* No i_mutex, but the inode is unconnected. */ 320 int reiserfs_delete_xattrs(struct inode *inode) 321 { 322 int err = reiserfs_for_each_xattr(inode, delete_one_xattr, NULL); 323 if (err) 324 reiserfs_warning(inode->i_sb, "jdm-20004", 325 "Couldn't delete all xattrs (%d)\n", err); 326 return err; 327 } 328 329 /* inode->i_mutex: down */ 330 int reiserfs_chown_xattrs(struct inode *inode, struct iattr *attrs) 331 { 332 int err = reiserfs_for_each_xattr(inode, chown_one_xattr, attrs); 333 if (err) 334 reiserfs_warning(inode->i_sb, "jdm-20007", 335 "Couldn't chown all xattrs (%d)\n", err); 336 return err; 337 } 338 339 #ifdef CONFIG_REISERFS_FS_XATTR 340 /* Returns a dentry corresponding to a specific extended attribute file 341 * for the inode. If flags allow, the file is created. Otherwise, a 342 * valid or negative dentry, or an error is returned. */ 343 static struct dentry *xattr_lookup(struct inode *inode, const char *name, 344 int flags) 345 { 346 struct dentry *xadir, *xafile; 347 int err = 0; 348 349 xadir = open_xa_dir(inode, flags); 350 if (IS_ERR(xadir)) 351 return ERR_CAST(xadir); 352 353 mutex_lock_nested(&xadir->d_inode->i_mutex, I_MUTEX_XATTR); 354 xafile = lookup_one_len(name, xadir, strlen(name)); 355 if (IS_ERR(xafile)) { 356 err = PTR_ERR(xafile); 357 goto out; 358 } 359 360 if (xafile->d_inode && (flags & XATTR_CREATE)) 361 err = -EEXIST; 362 363 if (!xafile->d_inode) { 364 err = -ENODATA; 365 if (xattr_may_create(flags)) 366 err = xattr_create(xadir->d_inode, xafile, 367 0700|S_IFREG); 368 } 369 370 if (err) 371 dput(xafile); 372 out: 373 mutex_unlock(&xadir->d_inode->i_mutex); 374 dput(xadir); 375 if (err) 376 return ERR_PTR(err); 377 return xafile; 378 } 379 380 /* Internal operations on file data */ 381 static inline void reiserfs_put_page(struct page *page) 382 { 383 kunmap(page); 384 page_cache_release(page); 385 } 386 387 static struct page *reiserfs_get_page(struct inode *dir, size_t n) 388 { 389 struct address_space *mapping = dir->i_mapping; 390 struct page *page; 391 /* We can deadlock if we try to free dentries, 392 and an unlink/rmdir has just occured - GFP_NOFS avoids this */ 393 mapping_set_gfp_mask(mapping, GFP_NOFS); 394 page = read_mapping_page(mapping, n >> PAGE_CACHE_SHIFT, NULL); 395 if (!IS_ERR(page)) { 396 kmap(page); 397 if (PageError(page)) 398 goto fail; 399 } 400 return page; 401 402 fail: 403 reiserfs_put_page(page); 404 return ERR_PTR(-EIO); 405 } 406 407 static inline __u32 xattr_hash(const char *msg, int len) 408 { 409 return csum_partial(msg, len, 0); 410 } 411 412 int reiserfs_commit_write(struct file *f, struct page *page, 413 unsigned from, unsigned to); 414 int reiserfs_prepare_write(struct file *f, struct page *page, 415 unsigned from, unsigned to); 416 417 static void update_ctime(struct inode *inode) 418 { 419 struct timespec now = current_fs_time(inode->i_sb); 420 if (hlist_unhashed(&inode->i_hash) || !inode->i_nlink || 421 timespec_equal(&inode->i_ctime, &now)) 422 return; 423 424 inode->i_ctime = CURRENT_TIME_SEC; 425 mark_inode_dirty(inode); 426 } 427 428 static int lookup_and_delete_xattr(struct inode *inode, const char *name) 429 { 430 int err = 0; 431 struct dentry *dentry, *xadir; 432 433 xadir = open_xa_dir(inode, XATTR_REPLACE); 434 if (IS_ERR(xadir)) 435 return PTR_ERR(xadir); 436 437 mutex_lock_nested(&xadir->d_inode->i_mutex, I_MUTEX_XATTR); 438 dentry = lookup_one_len(name, xadir, strlen(name)); 439 if (IS_ERR(dentry)) { 440 err = PTR_ERR(dentry); 441 goto out_dput; 442 } 443 444 if (dentry->d_inode) { 445 err = xattr_unlink(xadir->d_inode, dentry); 446 update_ctime(inode); 447 } 448 449 dput(dentry); 450 out_dput: 451 mutex_unlock(&xadir->d_inode->i_mutex); 452 dput(xadir); 453 return err; 454 } 455 456 457 /* Generic extended attribute operations that can be used by xa plugins */ 458 459 /* 460 * inode->i_mutex: down 461 */ 462 int 463 reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th, 464 struct inode *inode, const char *name, 465 const void *buffer, size_t buffer_size, int flags) 466 { 467 int err = 0; 468 struct dentry *dentry; 469 struct page *page; 470 char *data; 471 size_t file_pos = 0; 472 size_t buffer_pos = 0; 473 size_t new_size; 474 __u32 xahash = 0; 475 476 if (get_inode_sd_version(inode) == STAT_DATA_V1) 477 return -EOPNOTSUPP; 478 479 if (!buffer) 480 return lookup_and_delete_xattr(inode, name); 481 482 dentry = xattr_lookup(inode, name, flags); 483 if (IS_ERR(dentry)) 484 return PTR_ERR(dentry); 485 486 down_write(&REISERFS_I(inode)->i_xattr_sem); 487 488 xahash = xattr_hash(buffer, buffer_size); 489 while (buffer_pos < buffer_size || buffer_pos == 0) { 490 size_t chunk; 491 size_t skip = 0; 492 size_t page_offset = (file_pos & (PAGE_CACHE_SIZE - 1)); 493 if (buffer_size - buffer_pos > PAGE_CACHE_SIZE) 494 chunk = PAGE_CACHE_SIZE; 495 else 496 chunk = buffer_size - buffer_pos; 497 498 page = reiserfs_get_page(dentry->d_inode, file_pos); 499 if (IS_ERR(page)) { 500 err = PTR_ERR(page); 501 goto out_unlock; 502 } 503 504 lock_page(page); 505 data = page_address(page); 506 507 if (file_pos == 0) { 508 struct reiserfs_xattr_header *rxh; 509 skip = file_pos = sizeof(struct reiserfs_xattr_header); 510 if (chunk + skip > PAGE_CACHE_SIZE) 511 chunk = PAGE_CACHE_SIZE - skip; 512 rxh = (struct reiserfs_xattr_header *)data; 513 rxh->h_magic = cpu_to_le32(REISERFS_XATTR_MAGIC); 514 rxh->h_hash = cpu_to_le32(xahash); 515 } 516 517 err = reiserfs_prepare_write(NULL, page, page_offset, 518 page_offset + chunk + skip); 519 if (!err) { 520 if (buffer) 521 memcpy(data + skip, buffer + buffer_pos, chunk); 522 err = reiserfs_commit_write(NULL, page, page_offset, 523 page_offset + chunk + 524 skip); 525 } 526 unlock_page(page); 527 reiserfs_put_page(page); 528 buffer_pos += chunk; 529 file_pos += chunk; 530 skip = 0; 531 if (err || buffer_size == 0 || !buffer) 532 break; 533 } 534 535 new_size = buffer_size + sizeof(struct reiserfs_xattr_header); 536 if (!err && new_size < i_size_read(dentry->d_inode)) { 537 struct iattr newattrs = { 538 .ia_ctime = current_fs_time(inode->i_sb), 539 .ia_size = buffer_size, 540 .ia_valid = ATTR_SIZE | ATTR_CTIME, 541 }; 542 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); 543 down_write(&dentry->d_inode->i_alloc_sem); 544 err = reiserfs_setattr(dentry, &newattrs); 545 up_write(&dentry->d_inode->i_alloc_sem); 546 mutex_unlock(&dentry->d_inode->i_mutex); 547 } else 548 update_ctime(inode); 549 out_unlock: 550 up_write(&REISERFS_I(inode)->i_xattr_sem); 551 dput(dentry); 552 return err; 553 } 554 555 /* We need to start a transaction to maintain lock ordering */ 556 int reiserfs_xattr_set(struct inode *inode, const char *name, 557 const void *buffer, size_t buffer_size, int flags) 558 { 559 560 struct reiserfs_transaction_handle th; 561 int error, error2; 562 size_t jbegin_count = reiserfs_xattr_nblocks(inode, buffer_size); 563 564 if (!(flags & XATTR_REPLACE)) 565 jbegin_count += reiserfs_xattr_jcreate_nblocks(inode); 566 567 reiserfs_write_lock(inode->i_sb); 568 error = journal_begin(&th, inode->i_sb, jbegin_count); 569 if (error) { 570 reiserfs_write_unlock(inode->i_sb); 571 return error; 572 } 573 574 error = reiserfs_xattr_set_handle(&th, inode, name, 575 buffer, buffer_size, flags); 576 577 error2 = journal_end(&th, inode->i_sb, jbegin_count); 578 if (error == 0) 579 error = error2; 580 reiserfs_write_unlock(inode->i_sb); 581 582 return error; 583 } 584 585 /* 586 * inode->i_mutex: down 587 */ 588 int 589 reiserfs_xattr_get(struct inode *inode, const char *name, void *buffer, 590 size_t buffer_size) 591 { 592 ssize_t err = 0; 593 struct dentry *dentry; 594 size_t isize; 595 size_t file_pos = 0; 596 size_t buffer_pos = 0; 597 struct page *page; 598 __u32 hash = 0; 599 600 if (name == NULL) 601 return -EINVAL; 602 603 /* We can't have xattrs attached to v1 items since they don't have 604 * generation numbers */ 605 if (get_inode_sd_version(inode) == STAT_DATA_V1) 606 return -EOPNOTSUPP; 607 608 dentry = xattr_lookup(inode, name, XATTR_REPLACE); 609 if (IS_ERR(dentry)) { 610 err = PTR_ERR(dentry); 611 goto out; 612 } 613 614 down_read(&REISERFS_I(inode)->i_xattr_sem); 615 616 isize = i_size_read(dentry->d_inode); 617 618 /* Just return the size needed */ 619 if (buffer == NULL) { 620 err = isize - sizeof(struct reiserfs_xattr_header); 621 goto out_unlock; 622 } 623 624 if (buffer_size < isize - sizeof(struct reiserfs_xattr_header)) { 625 err = -ERANGE; 626 goto out_unlock; 627 } 628 629 while (file_pos < isize) { 630 size_t chunk; 631 char *data; 632 size_t skip = 0; 633 if (isize - file_pos > PAGE_CACHE_SIZE) 634 chunk = PAGE_CACHE_SIZE; 635 else 636 chunk = isize - file_pos; 637 638 page = reiserfs_get_page(dentry->d_inode, file_pos); 639 if (IS_ERR(page)) { 640 err = PTR_ERR(page); 641 goto out_unlock; 642 } 643 644 lock_page(page); 645 data = page_address(page); 646 if (file_pos == 0) { 647 struct reiserfs_xattr_header *rxh = 648 (struct reiserfs_xattr_header *)data; 649 skip = file_pos = sizeof(struct reiserfs_xattr_header); 650 chunk -= skip; 651 /* Magic doesn't match up.. */ 652 if (rxh->h_magic != cpu_to_le32(REISERFS_XATTR_MAGIC)) { 653 unlock_page(page); 654 reiserfs_put_page(page); 655 reiserfs_warning(inode->i_sb, "jdm-20001", 656 "Invalid magic for xattr (%s) " 657 "associated with %k", name, 658 INODE_PKEY(inode)); 659 err = -EIO; 660 goto out_unlock; 661 } 662 hash = le32_to_cpu(rxh->h_hash); 663 } 664 memcpy(buffer + buffer_pos, data + skip, chunk); 665 unlock_page(page); 666 reiserfs_put_page(page); 667 file_pos += chunk; 668 buffer_pos += chunk; 669 skip = 0; 670 } 671 err = isize - sizeof(struct reiserfs_xattr_header); 672 673 if (xattr_hash(buffer, isize - sizeof(struct reiserfs_xattr_header)) != 674 hash) { 675 reiserfs_warning(inode->i_sb, "jdm-20002", 676 "Invalid hash for xattr (%s) associated " 677 "with %k", name, INODE_PKEY(inode)); 678 err = -EIO; 679 } 680 681 out_unlock: 682 up_read(&REISERFS_I(inode)->i_xattr_sem); 683 dput(dentry); 684 685 out: 686 return err; 687 } 688 689 /* 690 * In order to implement different sets of xattr operations for each xattr 691 * prefix with the generic xattr API, a filesystem should create a 692 * null-terminated array of struct xattr_handler (one for each prefix) and 693 * hang a pointer to it off of the s_xattr field of the superblock. 694 * 695 * The generic_fooxattr() functions will use this list to dispatch xattr 696 * operations to the correct xattr_handler. 697 */ 698 #define for_each_xattr_handler(handlers, handler) \ 699 for ((handler) = *(handlers)++; \ 700 (handler) != NULL; \ 701 (handler) = *(handlers)++) 702 703 /* This is the implementation for the xattr plugin infrastructure */ 704 static inline struct xattr_handler * 705 find_xattr_handler_prefix(struct xattr_handler **handlers, 706 const char *name) 707 { 708 struct xattr_handler *xah; 709 710 if (!handlers) 711 return NULL; 712 713 for_each_xattr_handler(handlers, xah) { 714 if (strncmp(xah->prefix, name, strlen(xah->prefix)) == 0) 715 break; 716 } 717 718 return xah; 719 } 720 721 722 /* 723 * Inode operation getxattr() 724 */ 725 ssize_t 726 reiserfs_getxattr(struct dentry * dentry, const char *name, void *buffer, 727 size_t size) 728 { 729 struct inode *inode = dentry->d_inode; 730 struct xattr_handler *handler; 731 732 handler = find_xattr_handler_prefix(inode->i_sb->s_xattr, name); 733 734 if (!handler || get_inode_sd_version(inode) == STAT_DATA_V1) 735 return -EOPNOTSUPP; 736 737 return handler->get(inode, name, buffer, size); 738 } 739 740 /* 741 * Inode operation setxattr() 742 * 743 * dentry->d_inode->i_mutex down 744 */ 745 int 746 reiserfs_setxattr(struct dentry *dentry, const char *name, const void *value, 747 size_t size, int flags) 748 { 749 struct inode *inode = dentry->d_inode; 750 struct xattr_handler *handler; 751 752 handler = find_xattr_handler_prefix(inode->i_sb->s_xattr, name); 753 754 if (!handler || get_inode_sd_version(inode) == STAT_DATA_V1) 755 return -EOPNOTSUPP; 756 757 return handler->set(inode, name, value, size, flags); 758 } 759 760 /* 761 * Inode operation removexattr() 762 * 763 * dentry->d_inode->i_mutex down 764 */ 765 int reiserfs_removexattr(struct dentry *dentry, const char *name) 766 { 767 struct inode *inode = dentry->d_inode; 768 struct xattr_handler *handler; 769 handler = find_xattr_handler_prefix(inode->i_sb->s_xattr, name); 770 771 if (!handler || get_inode_sd_version(inode) == STAT_DATA_V1) 772 return -EOPNOTSUPP; 773 774 return handler->set(inode, name, NULL, 0, XATTR_REPLACE); 775 } 776 777 struct listxattr_buf { 778 size_t size; 779 size_t pos; 780 char *buf; 781 struct inode *inode; 782 }; 783 784 static int listxattr_filler(void *buf, const char *name, int namelen, 785 loff_t offset, u64 ino, unsigned int d_type) 786 { 787 struct listxattr_buf *b = (struct listxattr_buf *)buf; 788 size_t size; 789 if (name[0] != '.' || 790 (namelen != 1 && (name[1] != '.' || namelen != 2))) { 791 struct xattr_handler *handler; 792 handler = find_xattr_handler_prefix(b->inode->i_sb->s_xattr, 793 name); 794 if (!handler) /* Unsupported xattr name */ 795 return 0; 796 if (b->buf) { 797 size = handler->list(b->inode, b->buf + b->pos, 798 b->size, name, namelen); 799 if (size > b->size) 800 return -ERANGE; 801 } else { 802 size = handler->list(b->inode, NULL, 0, name, namelen); 803 } 804 805 b->pos += size; 806 } 807 return 0; 808 } 809 810 /* 811 * Inode operation listxattr() 812 * 813 * We totally ignore the generic listxattr here because it would be stupid 814 * not to. Since the xattrs are organized in a directory, we can just 815 * readdir to find them. 816 */ 817 ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size) 818 { 819 struct dentry *dir; 820 int err = 0; 821 loff_t pos = 0; 822 struct listxattr_buf buf = { 823 .inode = dentry->d_inode, 824 .buf = buffer, 825 .size = buffer ? size : 0, 826 }; 827 828 if (!dentry->d_inode) 829 return -EINVAL; 830 831 if (!dentry->d_sb->s_xattr || 832 get_inode_sd_version(dentry->d_inode) == STAT_DATA_V1) 833 return -EOPNOTSUPP; 834 835 dir = open_xa_dir(dentry->d_inode, XATTR_REPLACE); 836 if (IS_ERR(dir)) { 837 err = PTR_ERR(dir); 838 if (err == -ENODATA) 839 err = 0; /* Not an error if there aren't any xattrs */ 840 goto out; 841 } 842 843 mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_XATTR); 844 err = reiserfs_readdir_dentry(dir, &buf, listxattr_filler, &pos); 845 mutex_unlock(&dir->d_inode->i_mutex); 846 847 if (!err) 848 err = buf.pos; 849 850 dput(dir); 851 out: 852 return err; 853 } 854 855 static int reiserfs_check_acl(struct inode *inode, int mask) 856 { 857 struct posix_acl *acl; 858 int error = -EAGAIN; /* do regular unix permission checks by default */ 859 860 acl = reiserfs_get_acl(inode, ACL_TYPE_ACCESS); 861 862 if (acl) { 863 if (!IS_ERR(acl)) { 864 error = posix_acl_permission(inode, acl, mask); 865 posix_acl_release(acl); 866 } else if (PTR_ERR(acl) != -ENODATA) 867 error = PTR_ERR(acl); 868 } 869 870 return error; 871 } 872 873 static int create_privroot(struct dentry *dentry) 874 { 875 int err; 876 struct inode *inode = dentry->d_parent->d_inode; 877 WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex)); 878 879 err = xattr_mkdir(inode, dentry, 0700); 880 if (err || !dentry->d_inode) { 881 reiserfs_warning(dentry->d_sb, "jdm-20006", 882 "xattrs/ACLs enabled and couldn't " 883 "find/create .reiserfs_priv. " 884 "Failing mount."); 885 return -EOPNOTSUPP; 886 } 887 888 dentry->d_inode->i_flags |= S_PRIVATE; 889 reiserfs_info(dentry->d_sb, "Created %s - reserved for xattr " 890 "storage.\n", PRIVROOT_NAME); 891 892 return 0; 893 } 894 895 #else 896 int __init reiserfs_xattr_register_handlers(void) { return 0; } 897 void reiserfs_xattr_unregister_handlers(void) {} 898 static int create_privroot(struct dentry *dentry) { return 0; } 899 #endif 900 901 /* Actual operations that are exported to VFS-land */ 902 struct xattr_handler *reiserfs_xattr_handlers[] = { 903 #ifdef CONFIG_REISERFS_FS_XATTR 904 &reiserfs_xattr_user_handler, 905 &reiserfs_xattr_trusted_handler, 906 #endif 907 #ifdef CONFIG_REISERFS_FS_SECURITY 908 &reiserfs_xattr_security_handler, 909 #endif 910 #ifdef CONFIG_REISERFS_FS_POSIX_ACL 911 &reiserfs_posix_acl_access_handler, 912 &reiserfs_posix_acl_default_handler, 913 #endif 914 NULL 915 }; 916 917 static int xattr_mount_check(struct super_block *s) 918 { 919 /* We need generation numbers to ensure that the oid mapping is correct 920 * v3.5 filesystems don't have them. */ 921 if (old_format_only(s)) { 922 if (reiserfs_xattrs_optional(s)) { 923 /* Old format filesystem, but optional xattrs have 924 * been enabled. Error out. */ 925 reiserfs_warning(s, "jdm-2005", 926 "xattrs/ACLs not supported " 927 "on pre-v3.6 format filesystems. " 928 "Failing mount."); 929 return -EOPNOTSUPP; 930 } 931 } 932 933 return 0; 934 } 935 936 int reiserfs_permission(struct inode *inode, int mask) 937 { 938 /* 939 * We don't do permission checks on the internal objects. 940 * Permissions are determined by the "owning" object. 941 */ 942 if (IS_PRIVATE(inode)) 943 return 0; 944 945 #ifdef CONFIG_REISERFS_FS_XATTR 946 /* 947 * Stat data v1 doesn't support ACLs. 948 */ 949 if (get_inode_sd_version(inode) != STAT_DATA_V1) 950 return generic_permission(inode, mask, reiserfs_check_acl); 951 #endif 952 return generic_permission(inode, mask, NULL); 953 } 954 955 /* This will catch lookups from the fs root to .reiserfs_priv */ 956 static int 957 xattr_lookup_poison(struct dentry *dentry, struct qstr *q1, struct qstr *name) 958 { 959 struct dentry *priv_root = REISERFS_SB(dentry->d_sb)->priv_root; 960 if (container_of(q1, struct dentry, d_name) == priv_root) 961 return -ENOENT; 962 if (q1->len == name->len && 963 !memcmp(q1->name, name->name, name->len)) 964 return 0; 965 return 1; 966 } 967 968 static const struct dentry_operations xattr_lookup_poison_ops = { 969 .d_compare = xattr_lookup_poison, 970 }; 971 972 int reiserfs_lookup_privroot(struct super_block *s) 973 { 974 struct dentry *dentry; 975 int err = 0; 976 977 /* If we don't have the privroot located yet - go find it */ 978 mutex_lock(&s->s_root->d_inode->i_mutex); 979 dentry = lookup_one_len(PRIVROOT_NAME, s->s_root, 980 strlen(PRIVROOT_NAME)); 981 if (!IS_ERR(dentry)) { 982 REISERFS_SB(s)->priv_root = dentry; 983 if (!reiserfs_expose_privroot(s)) 984 s->s_root->d_op = &xattr_lookup_poison_ops; 985 if (dentry->d_inode) 986 dentry->d_inode->i_flags |= S_PRIVATE; 987 } else 988 err = PTR_ERR(dentry); 989 mutex_unlock(&s->s_root->d_inode->i_mutex); 990 991 return err; 992 } 993 994 /* We need to take a copy of the mount flags since things like 995 * MS_RDONLY don't get set until *after* we're called. 996 * mount_flags != mount_options */ 997 int reiserfs_xattr_init(struct super_block *s, int mount_flags) 998 { 999 int err = 0; 1000 struct dentry *privroot = REISERFS_SB(s)->priv_root; 1001 1002 err = xattr_mount_check(s); 1003 if (err) 1004 goto error; 1005 1006 if (!privroot->d_inode && !(mount_flags & MS_RDONLY)) { 1007 mutex_lock(&s->s_root->d_inode->i_mutex); 1008 err = create_privroot(REISERFS_SB(s)->priv_root); 1009 mutex_unlock(&s->s_root->d_inode->i_mutex); 1010 } 1011 1012 if (privroot->d_inode) { 1013 s->s_xattr = reiserfs_xattr_handlers; 1014 mutex_lock(&privroot->d_inode->i_mutex); 1015 if (!REISERFS_SB(s)->xattr_root) { 1016 struct dentry *dentry; 1017 dentry = lookup_one_len(XAROOT_NAME, privroot, 1018 strlen(XAROOT_NAME)); 1019 if (!IS_ERR(dentry)) 1020 REISERFS_SB(s)->xattr_root = dentry; 1021 else 1022 err = PTR_ERR(dentry); 1023 } 1024 mutex_unlock(&privroot->d_inode->i_mutex); 1025 } 1026 1027 error: 1028 if (err) { 1029 clear_bit(REISERFS_XATTRS_USER, &(REISERFS_SB(s)->s_mount_opt)); 1030 clear_bit(REISERFS_POSIXACL, &(REISERFS_SB(s)->s_mount_opt)); 1031 } 1032 1033 /* The super_block MS_POSIXACL must mirror the (no)acl mount option. */ 1034 if (reiserfs_posixacl(s)) 1035 s->s_flags |= MS_POSIXACL; 1036 else 1037 s->s_flags &= ~MS_POSIXACL; 1038 1039 return err; 1040 } 1041