drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1)

Description:

In kernel builds, any unprivileged process running on the NuttX device
can open /dev/efuse and attempt to read/write fuse content. Reading the
fuses may provide valuable information to an attacker controlling the user
process. The write operation, in extreme cases where the fuse blocks are
not locked, may brick the device.

This is part of https://github.com/apache/nuttx/issues/19410

Compiles ok.

Signed-off-by: Catalin Visinescu <catalin_visinescu@yahoo.com>
This commit is contained in:
Catalin Visinescu 2026-07-12 03:13:00 -04:00 committed by Alin Jerpelea
parent 0d2993dd87
commit 8d2b71d127
75 changed files with 85 additions and 85 deletions

View file

@ -826,5 +826,5 @@ int ds2xxx_initialize(FAR struct onewire_dev_s *dev,
priv->master->dev = dev;
priv->devtype = devtype;
return register_driver(devname, &g_ds2xxx_fops, 0666, priv);
return register_driver(devname, &g_ds2xxx_fops, 0600, priv);
}

View file

@ -243,7 +243,7 @@ int aie_register(FAR const char *path,
/* Register the aie device */
ret = register_driver(path, &g_aie_ops, 0666, upper);
ret = register_driver(path, &g_aie_ops, 0600, upper);
if (ret < 0)
{
_err("register aie driver failed: %d\n", ret);

View file

@ -803,7 +803,7 @@ int adc_register(FAR const char *path, FAR struct adc_dev_s *dev)
/* Register the ADC character driver */
ret = register_driver(path, &g_adc_fops, 0444, dev);
ret = register_driver(path, &g_adc_fops, 0400, dev);
if (ret < 0)
{
if (alloc_channel)

View file

@ -600,7 +600,7 @@ int ads1242_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
/* Register the character driver */
ret = register_driver(devpath, &g_ads1242_fops, 0666, priv);
ret = register_driver(devpath, &g_ads1242_fops, 0600, priv);
if (ret < 0)
{
_err("ERROR: Failed to register driver: %d\n", ret);

View file

@ -270,7 +270,7 @@ int ads7046_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
/* Register the character driver */
int ret = register_driver(devpath, &ads7046_fops, 0666, priv);
int ret = register_driver(devpath, &ads7046_fops, 0600, priv);
if (ret < 0)
{
aerr("ERROR: Failed to register driver: %s (%d)\n", strerror(-ret),

View file

@ -372,7 +372,7 @@ int comp_register(FAR const char *path, FAR struct comp_dev_s *dev)
/* Register the COMP character driver */
ret = register_driver(path, &g_comp_fops, 0444, dev);
ret = register_driver(path, &g_comp_fops, 0400, dev);
if (ret < 0)
{
nxmutex_destroy(&dev->ad_lock);

View file

@ -503,5 +503,5 @@ int dac_register(FAR const char *path, FAR struct dac_dev_s *dev)
dev->ad_ops->ao_reset(dev);
return register_driver(path, &g_dac_fops, 0222, dev);
return register_driver(path, &g_dac_fops, 0200, dev);
}

View file

@ -949,7 +949,7 @@ int hx711_register(unsigned char minor, FAR struct hx711_lower_s *lower)
}
snprintf(devname, sizeof(devname), DEVNAME_FMT, minor);
ret = register_driver(devname, &g_hx711_fops, 0666, dev);
ret = register_driver(devname, &g_hx711_fops, 0600, dev);
if (ret)
{
kmm_free(dev);

View file

@ -211,7 +211,7 @@ int opamp_register(FAR const char *path, FAR struct opamp_dev_s *dev)
/* Register the OPAMP character driver */
ret = register_driver(path, &g_opamp_fops, 0444, dev);
ret = register_driver(path, &g_opamp_fops, 0400, dev);
if (ret < 0)
{
nxmutex_destroy(&dev->ad_closelock);

View file

@ -966,7 +966,7 @@ int tone_register(FAR const char *path, FAR struct pwm_lowerhalf_s *tone,
/* Register the PWM device */
audinfo("Registering %s\n", path);
return register_driver(path, &g_toneops, 0666, upper);
return register_driver(path, &g_toneops, 0600, upper);
}
#endif /* CONFIG_AUDIO_TONE */

View file

@ -69,7 +69,7 @@ int bchdev_register(FAR const char *blkdev, FAR const char *chardev,
/* Then setup the character device */
ret = register_driver(chardev, &g_bch_fops, 0666, handle);
ret = register_driver(chardev, &g_bch_fops, 0600, handle);
if (ret < 0)
{
ferr("ERROR: register_driver failed: %d\n", -ret);

View file

@ -1291,7 +1291,7 @@ int can_register(FAR const char *path, FAR struct can_dev_s *dev)
/* Register the CAN device */
caninfo("Registering %s\n", path);
return register_driver(path, &g_canops, 0666, dev);
return register_driver(path, &g_canops, 0600, dev);
}
/****************************************************************************

View file

@ -1682,7 +1682,7 @@ int mfrc522_register(FAR const char *devpath, FAR struct spi_dev_s *spi)
/* Register the character driver */
ret = register_driver(devpath, &g_mfrc522fops, 0666, dev);
ret = register_driver(devpath, &g_mfrc522fops, 0600, dev);
if (ret < 0)
{
ctlserr("ERROR: Failed to register driver: %d\n", ret);

View file

@ -1158,7 +1158,7 @@ int pn532_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
/* Register the character driver */
ret = register_driver(devpath, &g_pn532fops, 0666, dev);
ret = register_driver(devpath, &g_pn532fops, 0600, dev);
if (ret < 0)
{
ctlserr("ERROR: Failed to register driver: %d\n", ret);

View file

@ -484,7 +484,7 @@ int tmc_etr_register(FAR struct coresight_tmc_dev_s *tmcdev,
}
snprintf(pathname, sizeof(pathname), "/dev/%s", desc->name);
ret = register_driver(pathname, &g_tmc_fops, 0444, tmcdev);
ret = register_driver(pathname, &g_tmc_fops, 0400, tmcdev);
if (ret < 0)
{
cserr("%s:driver register failed\n", desc->name);

View file

@ -324,7 +324,7 @@ void devurandom_register(void)
g_prng.state.z = g_prng.state.x << 25;
#endif
register_driver("/dev/urandom", &g_urand_fops, 0666, NULL);
register_driver("/dev/urandom", &g_urand_fops, 0600, NULL);
}
#endif /* CONFIG_DEV_URANDOM && CONFIG_DEV_URANDOM_ARCH */

View file

@ -359,7 +359,7 @@ int rng90_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
/* Register the character driver */
ret = register_driver(devpath, &g_rng90_fops, 0666, priv);
ret = register_driver(devpath, &g_rng90_fops, 0600, priv);
if (ret < 0)
{
crypterr("ERROR: Failed to register driver: %d\n", ret);

View file

@ -263,7 +263,7 @@ int se05x_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
/* Register driver */
ret = register_driver(devpath, &g_fops, 0666, priv);
ret = register_driver(devpath, &g_fops, 0600, priv);
if (ret < 0)
{
crypterr("ERROR: Failed to register driver: %d\n", ret);

View file

@ -1086,7 +1086,7 @@ int ee24xx_initialize(FAR struct i2c_master_s *bus, uint8_t devaddr,
strlcpy(uuidname, devname, size);
strlcat(uuidname, ".uuid", size);
ret = register_driver(uuidname, &g_at24cs_uuid_fops, 0444, eedev);
ret = register_driver(uuidname, &g_at24cs_uuid_fops, 0400, eedev);
kmm_free(uuidname);
@ -1097,6 +1097,6 @@ int ee24xx_initialize(FAR struct i2c_master_s *bus, uint8_t devaddr,
}
#endif
return register_driver_with_size(devname, &g_ee24xx_fops, 0666, eedev,
return register_driver_with_size(devname, &g_ee24xx_fops, 0600, eedev,
eedev->size);
}

View file

@ -1520,7 +1520,7 @@ int ee25xx_initialize(FAR struct spi_dev_s *dev, uint16_t spi_devid,
"readonly %d\n", devname, eedev->size, eedev->pgsize,
eedev->addrlen, eedev->readonly);
return register_driver(devname, &g_ee25xx_fops, 0666, eedev);
return register_driver(devname, &g_ee25xx_fops, 0600, eedev);
}
/****************************************************************************

View file

@ -303,7 +303,7 @@ FAR void *efuse_register(FAR const char *path,
/* Register the efuse timer device */
ret = register_driver(path, &g_efuseops, 0666, upper);
ret = register_driver(path, &g_efuseops, 0600, upper);
if (ret < 0)
{
merr("register_driver failed: %d\n", ret);

View file

@ -416,7 +416,7 @@ int i2c_register(FAR struct i2c_master_s *i2c, int bus)
/* Create the character device name */
snprintf(devname, sizeof(devname), DEVNAME_FMT, bus);
ret = register_driver(devname, &g_i2cdrvr_fops, 0666, priv);
ret = register_driver(devname, &g_i2cdrvr_fops, 0600, priv);
if (ret < 0)
{
/* Free the device structure if we failed to create the character

View file

@ -567,7 +567,7 @@ int i2c_slave_register(FAR struct i2c_slave_s *dev, int bus, int addr,
}
snprintf(devname, sizeof(devname), DEVNAME_FMT, bus);
ret = register_driver(devname, &g_i2cslavefops, 0666, priv);
ret = register_driver(devname, &g_i2cslavefops, 0600, priv);
if (ret < 0)
{
kmm_free(priv);

View file

@ -692,7 +692,7 @@ int i2schar_register(FAR struct i2s_dev_s *i2s, int minor)
/* Create the character device name */
snprintf(devname, sizeof(devname), DEVNAME_FMT, minor);
ret = register_driver(devname, &g_i2schar_fops, 0666, priv);
ret = register_driver(devname, &g_i2schar_fops, 0600, priv);
if (ret < 0)
{
/* Free the device structure if we failed to create the character