Since snprintf() returns the would-be-output size instead of the actual output size, the succeeding calls may go beyond the given buffer limit. Fix it by replacing with scnprintf(). Cc: Subbu Seetharaman <subbu.seetharaman@xxxxxxxxxxxx> Cc: Ketan Mukadam <ketan.mukadam@xxxxxxxxxxxx> Cc: Jitendra Bhivare <jitendra.bhivare@xxxxxxxxxxxx> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> --- drivers/scsi/be2iscsi/be_mgmt.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c index d4febaadfaa3..3ae8d2b4ea31 100644 --- a/drivers/scsi/be2iscsi/be_mgmt.c +++ b/drivers/scsi/be2iscsi/be_mgmt.c @@ -1178,11 +1178,11 @@ beiscsi_active_session_disp(struct device *dev, struct device_attribute *attr, if (test_bit(ulp_num, (void *)&phba->fw_config.ulp_supported)) { avlbl_cids = BEISCSI_ULP_AVLBL_CID(phba, ulp_num); total_cids = BEISCSI_GET_CID_COUNT(phba, ulp_num); - len += snprintf(buf+len, PAGE_SIZE - len, + len += scnprintf(buf+len, PAGE_SIZE - len, "ULP%d : %d\n", ulp_num, (total_cids - avlbl_cids)); } else - len += snprintf(buf+len, PAGE_SIZE - len, + len += scnprintf(buf+len, PAGE_SIZE - len, "ULP%d : %d\n", ulp_num, 0); } @@ -1208,11 +1208,11 @@ beiscsi_free_session_disp(struct device *dev, struct device_attribute *attr, for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++) { if (test_bit(ulp_num, (void *)&phba->fw_config.ulp_supported)) - len += snprintf(buf+len, PAGE_SIZE - len, + len += scnprintf(buf+len, PAGE_SIZE - len, "ULP%d : %d\n", ulp_num, BEISCSI_ULP_AVLBL_CID(phba, ulp_num)); else - len += snprintf(buf+len, PAGE_SIZE - len, + len += scnprintf(buf+len, PAGE_SIZE - len, "ULP%d : %d\n", ulp_num, 0); } -- 2.16.4