if (copy_from_user(&attributes, userbuf, sizeof(attributes))) return -EFAULT;
if (attributes & ~(EFI_VARIABLE_MASK)) return -EINVAL;
data = memdup_user(userbuf + sizeof(attributes), datasize); if (IS_ERR(data)) return PTR_ERR(data);
inode_lock(inode); if (var->removed) { /* * file got removed; don't allow a set. Caused by an * unsuccessful create or successful delete write * racing with us.
*/
bytes = -EIO; goto out;
}
bytes = efivar_entry_set_get_size(var, attributes, &datasize,
data, &set); if (!set) { if (bytes == -ENOENT)
bytes = -EIO; goto out;
}
if (bytes == -ENOENT) { /* * zero size signals to release that the write deleted * the variable
*/
i_size_write(inode, 0);
} else {
i_size_write(inode, datasize + sizeof(attributes));
inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.