Commit 895ae58d authored by Juergen Christ's avatar Juergen Christ Committed by Vasily Gorbik
Browse files

s390/zcrypt: Add admask to zcdn



Zcrypt custom devices now support control domain masks.  Users can set and
modify this mask to allow custom devices to access certain control domains.

Signed-off-by: default avatarJuergen Christ <jchrist@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent d710d370
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -315,6 +315,7 @@ struct ap_perms {
	unsigned long ioctlm[BITS_TO_LONGS(AP_IOCTLS)];
	unsigned long apm[BITS_TO_LONGS(AP_DEVICES)];
	unsigned long aqm[BITS_TO_LONGS(AP_DOMAINS)];
	unsigned long adm[BITS_TO_LONGS(AP_DOMAINS)];
};
extern struct ap_perms ap_perms;
extern struct mutex ap_perms_mutex;
+43 −0
Original line number Diff line number Diff line
@@ -285,10 +285,53 @@ static ssize_t aqmask_store(struct device *dev,

static DEVICE_ATTR_RW(aqmask);

static ssize_t admask_show(struct device *dev,
			   struct device_attribute *attr,
			   char *buf)
{
	int i, rc;
	struct zcdn_device *zcdndev = to_zcdn_dev(dev);

	if (mutex_lock_interruptible(&ap_perms_mutex))
		return -ERESTARTSYS;

	buf[0] = '0';
	buf[1] = 'x';
	for (i = 0; i < sizeof(zcdndev->perms.adm) / sizeof(long); i++)
		snprintf(buf + 2 + 2 * i * sizeof(long),
			 PAGE_SIZE - 2 - 2 * i * sizeof(long),
			 "%016lx", zcdndev->perms.adm[i]);
	buf[2 + 2 * i * sizeof(long)] = '\n';
	buf[2 + 2 * i * sizeof(long) + 1] = '\0';
	rc = 2 + 2 * i * sizeof(long) + 1;

	mutex_unlock(&ap_perms_mutex);

	return rc;
}

static ssize_t admask_store(struct device *dev,
			    struct device_attribute *attr,
			    const char *buf, size_t count)
{
	int rc;
	struct zcdn_device *zcdndev = to_zcdn_dev(dev);

	rc = ap_parse_mask_str(buf, zcdndev->perms.adm,
			       AP_DOMAINS, &ap_perms_mutex);
	if (rc)
		return rc;

	return count;
}

static DEVICE_ATTR_RW(admask);

static struct attribute *zcdn_dev_attrs[] = {
	&dev_attr_ioctlmask.attr,
	&dev_attr_apmask.attr,
	&dev_attr_aqmask.attr,
	&dev_attr_admask.attr,
	NULL
};