From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37849) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zrd08-00065Z-TE for qemu-devel@nongnu.org; Wed, 28 Oct 2015 22:31:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zrd05-0004nR-Nu for qemu-devel@nongnu.org; Wed, 28 Oct 2015 22:31:40 -0400 Received: from mga09.intel.com ([134.134.136.24]:12965) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zrd05-0004n9-Hg for qemu-devel@nongnu.org; Wed, 28 Oct 2015 22:31:37 -0400 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> From: Xiao Guangrong Message-ID: <5631837C.60503@linux.intel.com> Date: Thu, 29 Oct 2015 10:25:00 +0800 MIME-Version: 1.0 In-Reply-To: <20151028164645.GC1925@stefanha-x1.localdomain> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v5 29/33] nvdimm acpi: support Get Namespace Label Data function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi 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 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; }