Commit 2b17e90d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'tpmdd-v6.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd

Pull tpm fixes from Jarkko Sakkinen:
 "I picked up three small scale updates that I think would improve the
  quality of the release"

* tag 'tpmdd-v6.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd:
  tpm_tis: Explicitly check for error code
  tpm: Switch i2c drivers back to use .probe()
  security: keys: perform capable check only on privileged operations
parents f837f0a3 513253f8
...@@ -160,7 +160,7 @@ static struct i2c_driver st33zp24_i2c_driver = { ...@@ -160,7 +160,7 @@ static struct i2c_driver st33zp24_i2c_driver = {
.of_match_table = of_match_ptr(of_st33zp24_i2c_match), .of_match_table = of_match_ptr(of_st33zp24_i2c_match),
.acpi_match_table = ACPI_PTR(st33zp24_i2c_acpi_match), .acpi_match_table = ACPI_PTR(st33zp24_i2c_acpi_match),
}, },
.probe_new = st33zp24_i2c_probe, .probe = st33zp24_i2c_probe,
.remove = st33zp24_i2c_remove, .remove = st33zp24_i2c_remove,
.id_table = st33zp24_i2c_id .id_table = st33zp24_i2c_id
}; };
......
...@@ -203,7 +203,7 @@ static SIMPLE_DEV_PM_OPS(i2c_atmel_pm_ops, tpm_pm_suspend, tpm_pm_resume); ...@@ -203,7 +203,7 @@ static SIMPLE_DEV_PM_OPS(i2c_atmel_pm_ops, tpm_pm_suspend, tpm_pm_resume);
static struct i2c_driver i2c_atmel_driver = { static struct i2c_driver i2c_atmel_driver = {
.id_table = i2c_atmel_id, .id_table = i2c_atmel_id,
.probe_new = i2c_atmel_probe, .probe = i2c_atmel_probe,
.remove = i2c_atmel_remove, .remove = i2c_atmel_remove,
.driver = { .driver = {
.name = I2C_DRIVER_NAME, .name = I2C_DRIVER_NAME,
......
...@@ -716,7 +716,7 @@ static void tpm_tis_i2c_remove(struct i2c_client *client) ...@@ -716,7 +716,7 @@ static void tpm_tis_i2c_remove(struct i2c_client *client)
static struct i2c_driver tpm_tis_i2c_driver = { static struct i2c_driver tpm_tis_i2c_driver = {
.id_table = tpm_tis_i2c_table, .id_table = tpm_tis_i2c_table,
.probe_new = tpm_tis_i2c_probe, .probe = tpm_tis_i2c_probe,
.remove = tpm_tis_i2c_remove, .remove = tpm_tis_i2c_remove,
.driver = { .driver = {
.name = "tpm_i2c_infineon", .name = "tpm_i2c_infineon",
......
...@@ -650,7 +650,7 @@ static SIMPLE_DEV_PM_OPS(i2c_nuvoton_pm_ops, tpm_pm_suspend, tpm_pm_resume); ...@@ -650,7 +650,7 @@ static SIMPLE_DEV_PM_OPS(i2c_nuvoton_pm_ops, tpm_pm_suspend, tpm_pm_resume);
static struct i2c_driver i2c_nuvoton_driver = { static struct i2c_driver i2c_nuvoton_driver = {
.id_table = i2c_nuvoton_id, .id_table = i2c_nuvoton_id,
.probe_new = i2c_nuvoton_probe, .probe = i2c_nuvoton_probe,
.remove = i2c_nuvoton_remove, .remove = i2c_nuvoton_remove,
.driver = { .driver = {
.name = "tpm_i2c_nuvoton", .name = "tpm_i2c_nuvoton",
......
...@@ -366,8 +366,13 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count) ...@@ -366,8 +366,13 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
goto out; goto out;
} }
size += recv_data(chip, &buf[TPM_HEADER_SIZE], rc = recv_data(chip, &buf[TPM_HEADER_SIZE],
expected - TPM_HEADER_SIZE); expected - TPM_HEADER_SIZE);
if (rc < 0) {
size = rc;
goto out;
}
size += rc;
if (size < expected) { if (size < expected) {
dev_err(&chip->dev, "Unable to read remainder of result\n"); dev_err(&chip->dev, "Unable to read remainder of result\n");
size = -ETIME; size = -ETIME;
......
...@@ -394,7 +394,7 @@ static struct i2c_driver tpm_tis_i2c_driver = { ...@@ -394,7 +394,7 @@ static struct i2c_driver tpm_tis_i2c_driver = {
.pm = &tpm_tis_pm, .pm = &tpm_tis_pm,
.of_match_table = of_match_ptr(of_tis_i2c_match), .of_match_table = of_match_ptr(of_tis_i2c_match),
}, },
.probe_new = tpm_tis_i2c_probe, .probe = tpm_tis_i2c_probe,
.remove = tpm_tis_i2c_remove, .remove = tpm_tis_i2c_remove,
.id_table = tpm_tis_i2c_id, .id_table = tpm_tis_i2c_id,
}; };
......
...@@ -779,7 +779,7 @@ static void tpm_cr50_i2c_remove(struct i2c_client *client) ...@@ -779,7 +779,7 @@ static void tpm_cr50_i2c_remove(struct i2c_client *client)
static SIMPLE_DEV_PM_OPS(cr50_i2c_pm, tpm_pm_suspend, tpm_pm_resume); static SIMPLE_DEV_PM_OPS(cr50_i2c_pm, tpm_pm_suspend, tpm_pm_resume);
static struct i2c_driver cr50_i2c_driver = { static struct i2c_driver cr50_i2c_driver = {
.probe_new = tpm_cr50_i2c_probe, .probe = tpm_cr50_i2c_probe,
.remove = tpm_cr50_i2c_remove, .remove = tpm_cr50_i2c_remove,
.driver = { .driver = {
.name = "cr50_i2c", .name = "cr50_i2c",
......
...@@ -980,14 +980,19 @@ long keyctl_chown_key(key_serial_t id, uid_t user, gid_t group) ...@@ -980,14 +980,19 @@ long keyctl_chown_key(key_serial_t id, uid_t user, gid_t group)
ret = -EACCES; ret = -EACCES;
down_write(&key->sem); down_write(&key->sem);
if (!capable(CAP_SYS_ADMIN)) { {
bool is_privileged_op = false;
/* only the sysadmin can chown a key to some other UID */ /* only the sysadmin can chown a key to some other UID */
if (user != (uid_t) -1 && !uid_eq(key->uid, uid)) if (user != (uid_t) -1 && !uid_eq(key->uid, uid))
goto error_put; is_privileged_op = true;
/* only the sysadmin can set the key's GID to a group other /* only the sysadmin can set the key's GID to a group other
* than one of those that the current process subscribes to */ * than one of those that the current process subscribes to */
if (group != (gid_t) -1 && !gid_eq(gid, key->gid) && !in_group_p(gid)) if (group != (gid_t) -1 && !gid_eq(gid, key->gid) && !in_group_p(gid))
is_privileged_op = true;
if (is_privileged_op && !capable(CAP_SYS_ADMIN))
goto error_put; goto error_put;
} }
...@@ -1088,7 +1093,7 @@ long keyctl_setperm_key(key_serial_t id, key_perm_t perm) ...@@ -1088,7 +1093,7 @@ long keyctl_setperm_key(key_serial_t id, key_perm_t perm)
down_write(&key->sem); down_write(&key->sem);
/* if we're not the sysadmin, we can only change a key that we own */ /* if we're not the sysadmin, we can only change a key that we own */
if (capable(CAP_SYS_ADMIN) || uid_eq(key->uid, current_fsuid())) { if (uid_eq(key->uid, current_fsuid()) || capable(CAP_SYS_ADMIN)) {
key->perm = perm; key->perm = perm;
notify_key(key, NOTIFY_KEY_SETATTR, 0); notify_key(key, NOTIFY_KEY_SETATTR, 0);
ret = 0; ret = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment