Commit 3e660fbef96f53d01ba022b1b75b72759a02983e

Authored by Akinobu Mita
Committed by Christoph Hellwig
1 parent 97cd6805ac

ufs: fix NULL dereference when no regulators are defined

If no voltage supply regulators are defined for the UFS devices (assumed
they are always-on), ufshcd_config_vreg_load() can be called on
suspend/resume paths with vreg == NULL as hba->vreg_info.vcc* equal to
NULL, and it causes NULL pointer dereference.

This fixes it by making ufshcd_config_vreg_{h,l}pm noop when no regulators
are defined.

Signed-off-by: Akinobu Mita <mita@fixstars.com>
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>

Showing 1 changed file with 6 additions and 0 deletions Side-by-side Diff

drivers/scsi/ufs/ufshcd.c
... ... @@ -4268,12 +4268,18 @@
4268 4268 static inline int ufshcd_config_vreg_lpm(struct ufs_hba *hba,
4269 4269 struct ufs_vreg *vreg)
4270 4270 {
  4271 + if (!vreg)
  4272 + return 0;
  4273 +
4271 4274 return ufshcd_config_vreg_load(hba->dev, vreg, UFS_VREG_LPM_LOAD_UA);
4272 4275 }
4273 4276  
4274 4277 static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba,
4275 4278 struct ufs_vreg *vreg)
4276 4279 {
  4280 + if (!vreg)
  4281 + return 0;
  4282 +
4277 4283 return ufshcd_config_vreg_load(hba->dev, vreg, vreg->max_uA);
4278 4284 }
4279 4285