Exemple #1
0
static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
			    struct timespec time, struct pstore_info *psi)
{
	struct pstore_erase_data edata;
	struct efivar_entry *entry = NULL;
	char name[DUMP_NAME_LEN];
	efi_char16_t efi_name[DUMP_NAME_LEN];
	int found, i;
	unsigned int part;

	do_div(id, 1000);
	part = do_div(id, 100);
	sprintf(name, "dump-type%u-%u-%d-%lu", type, part, count, time.tv_sec);

	for (i = 0; i < DUMP_NAME_LEN; i++)
		efi_name[i] = name[i];

	edata.id = part;
	edata.type = type;
	edata.count = count;
	edata.time = time;
	edata.name = efi_name;

	efivar_entry_iter_begin();
	found = __efivar_entry_iter(efi_pstore_erase_func, &efivar_sysfs_list, &edata, &entry);
	efivar_entry_iter_end();

	if (found)
		efivar_unregister(entry);

	return 0;
}
Exemple #2
0
static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
			     struct bin_attribute *bin_attr,
			     char *buf, loff_t pos, size_t count)
{
	struct efi_variable *del_var = (struct efi_variable *)buf;
	struct efivar_entry *entry;
	int err = 0;

	if (!capable(CAP_SYS_ADMIN))
		return -EACCES;

	efivar_entry_iter_begin();
	entry = efivar_entry_find(del_var->VariableName, del_var->VendorGuid,
				  &efivar_sysfs_list, true);
	if (!entry)
		err = -EINVAL;
	else if (__efivar_entry_delete(entry))
		err = -EIO;

	efivar_entry_iter_end();

	if (err)
		return err;

	efivar_unregister(entry);

	/* It's dead Jim.... */
	return count;
}
static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
                             struct bin_attribute *bin_attr,
                             char *buf, loff_t pos, size_t count)
{
    struct efi_variable *del_var = (struct efi_variable *)buf;
    struct compat_efi_variable *compat;
    struct efivar_entry *entry;
    efi_char16_t *name;
    efi_guid_t vendor;
    int err = 0;

    if (!capable(CAP_SYS_ADMIN))
        return -EACCES;

    if (is_compat()) {
        if (count != sizeof(*compat))
            return -EINVAL;

        compat = (struct compat_efi_variable *)buf;
        name = compat->VariableName;
        vendor = compat->VendorGuid;
    } else {
        if (count != sizeof(*del_var))
            return -EINVAL;

        name = del_var->VariableName;
        vendor = del_var->VendorGuid;
    }

    efivar_entry_iter_begin();
    entry = efivar_entry_find(name, vendor, &efivar_sysfs_list, true);
    if (!entry)
        err = -EINVAL;
    else if (__efivar_entry_delete(entry))
        err = -EIO;

    if (err) {
        efivar_entry_iter_end();
        return err;
    }

    if (!entry->scanning) {
        efivar_entry_iter_end();
        efivar_unregister(entry);
    } else
        efivar_entry_iter_end();

    /* It's dead Jim.... */
    return count;
}
Exemple #4
0
static int efi_pstore_open(struct pstore_info *psi)
{
	efivar_entry_iter_begin();
	psi->data = NULL;
	return 0;
}