From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiao Guangrong Subject: Re: [PATCH v5 29/33] nvdimm acpi: support Get Namespace Label Data function Date: Thu, 29 Oct 2015 10:25:00 +0800 Message-ID: <5631837C.60503@linux.intel.com> References: <1446071191-62591-1-git-send-email-guangrong.xiao@linux.intel.com> <1446071191-62591-30-git-send-email-guangrong.xiao@linux.intel.com> <20151028164645.GC1925@stefanha-x1.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Cc: ehabkost@redhat.com, kvm@vger.kernel.org, mst@redhat.com, gleb@kernel.org, mtosatti@redhat.com, qemu-devel@nongnu.org, imammedo@redhat.com, pbonzini@redhat.com, dan.j.williams@intel.com, rth@twiddle.net To: Stefan Hajnoczi Return-path: In-Reply-To: <20151028164645.GC1925@stefanha-x1.localdomain> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org Sender: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org List-Id: kvm.vger.kernel.org On 10/29/2015 12:46 AM, Stefan Hajnoczi wrote: > On Wed, Oct 28, 2015 at 10:26:27PM +0000, Xiao Guangrong wrote: >> +static void nvdimm_dsm_func_get_label_data(NVDIMMDevice *nvdimm, >> + nvdimm_dsm_in *in, GArray *out) >> +{ >> + NVDIMMClass *nvc = NVDIMM_GET_CLASS(nvdimm); >> + nvdimm_func_in_get_label_data *get_label_data = &in->func_get_label_data; >> + void *buf; >> + uint32_t status = NVDIMM_DSM_STATUS_SUCCESS; >> + >> + le32_to_cpus(&get_label_data->offset); >> + le32_to_cpus(&get_label_data->length); >> + >> + nvdimm_debug("Read Label Data: offset %#x length %#x.\n", >> + get_label_data->offset, get_label_data->length); >> + >> + if (nvdimm->label_size < get_label_data->offset + get_label_data->length) { > > Integer overflow isn't handled here and it's unclear if that can cause > problems later on. It's safest to catch it right away instead of > relying on nvc->read_label_data() to check again. > Good catch, Stefan! I will fix it by adding a additional check: if (get_label_data->offset + get_label_data->length > get_label_data->offset) { nvdimm_debug("offset %#x + length %#x overflowed.\n"); status = NVDIMM_DSM_DEV_STATUS_INVALID_PARAS; goto exit; }