cregit-Linux how code gets into the kernel

Release 4.8 fs/ext4/symlink.c

Directory: fs/ext4
/*
 *  linux/fs/ext4/symlink.c
 *
 * Only fast symlinks left here - the rest is done by generic code. AV, 1999
 *
 * Copyright (C) 1992, 1993, 1994, 1995
 * Remy Card (card@masi.ibp.fr)
 * Laboratoire MASI - Institut Blaise Pascal
 * Universite Pierre et Marie Curie (Paris VI)
 *
 *  from
 *
 *  linux/fs/minix/symlink.c
 *
 *  Copyright (C) 1991, 1992  Linus Torvalds
 *
 *  ext4 symlink handling code
 */

#include <linux/fs.h>
#include <linux/namei.h>
#include "ext4.h"
#include "xattr.h"


static const char *ext4_encrypted_get_link(struct dentry *dentry, struct inode *inode, struct delayed_call *done) { struct page *cpage = NULL; char *caddr, *paddr = NULL; struct fscrypt_str cstr, pstr; struct fscrypt_symlink_data *sd; loff_t size = min_t(loff_t, i_size_read(inode), PAGE_SIZE - 1); int res; u32 max_size = inode->i_sb->s_blocksize; if (!dentry) return ERR_PTR(-ECHILD); res = fscrypt_get_encryption_info(inode); if (res) return ERR_PTR(res); if (ext4_inode_is_fast_symlink(inode)) { caddr = (char *) EXT4_I(inode)->i_data; max_size = sizeof(EXT4_I(inode)->i_data); } else { cpage = read_mapping_page(inode->i_mapping, 0, NULL); if (IS_ERR(cpage)) return ERR_CAST(cpage); caddr = page_address(cpage); caddr[size] = 0; } /* Symlink is encrypted */ sd = (struct fscrypt_symlink_data *)caddr; cstr.name = sd->encrypted_path; cstr.len = le16_to_cpu(sd->len); if ((cstr.len + sizeof(struct fscrypt_symlink_data) - 1) > max_size) { /* Symlink data on the disk is corrupted */ res = -EFSCORRUPTED; goto errout; } res = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr); if (res) goto errout; res = fscrypt_fname_disk_to_usr(inode, 0, 0, &cstr, &pstr); if (res < 0) goto errout; paddr = pstr.name; /* Null-terminate the name */ if (res <= pstr.len) paddr[res] = '\0'; if (cpage) put_page(cpage); set_delayed_call(done, kfree_link, paddr); return paddr; errout: if (cpage) put_page(cpage); kfree(paddr); return ERR_PTR(res); }

Contributors

PersonTokensPropCommitsCommitProp
theodore tsotheodore tso27577.46%323.08%
al viroal viro3810.70%538.46%
jaegeuk kimjaegeuk kim267.32%17.69%
dave kleikampdave kleikamp113.10%17.69%
kirill a. shutemovkirill a. shutemov20.56%17.69%
linus torvaldslinus torvalds20.56%17.69%
darrick j. wongdarrick j. wong10.28%17.69%
Total355100.00%13100.00%

const struct inode_operations ext4_encrypted_symlink_inode_operations = { .readlink = generic_readlink, .get_link = ext4_encrypted_get_link, .setattr = ext4_setattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, .removexattr = generic_removexattr, }; const struct inode_operations ext4_symlink_inode_operations = { .readlink = generic_readlink, .get_link = page_get_link, .setattr = ext4_setattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, .removexattr = generic_removexattr, }; const struct inode_operations ext4_fast_symlink_inode_operations = { .readlink = generic_readlink, .get_link = simple_get_link, .setattr = ext4_setattr, .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, .removexattr = generic_removexattr, };

Overall Contributors

PersonTokensPropCommitsCommitProp
theodore tsotheodore tso27856.28%315.79%
dave kleikampdave kleikamp8316.80%15.26%
al viroal viro8116.40%631.58%
jaegeuk kimjaegeuk kim265.26%15.26%
dmitriy monakhovdmitriy monakhov102.02%15.26%
mingming caomingming cao51.01%15.26%
arjan van de venarjan van de ven20.40%15.26%
linus torvaldslinus torvalds20.40%15.26%
kirill a. shutemovkirill a. shutemov20.40%15.26%
christoph hellwigchristoph hellwig20.40%15.26%
tao matao ma20.40%15.26%
darrick j. wongdarrick j. wong10.20%15.26%
Total494100.00%19100.00%
Directory: fs/ext4
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.