On 20-05-2014 22:52:41, Dan Carpenter wrote:
> On Tue, May 20, 2014 at 05:12:46PM +0200, Matthias Beyer wrote:
> > This patch outsources the code from the IsFlash2x() check in
> > bcm_char_ioctl_nvm_rw() function to shorten it.
> > 
> 
> This patch introduces a bug.  Please fix and resend.
> 
> Also move the function forward so we don't need a declaration.
> 
> > +
> > +static int handle_flash2x_adapter(struct bcm_mini_adapter *Adapter,
> > +   PUCHAR pReadData, struct bcm_nvm_readwrite *stNVMReadWrite)
> > +{
> > +   /*
> > +    * New Requirement:-
> > +    * DSD section updation will be allowed in two case:-
> > +    * 1.  if DSD sig is present in DSD header means dongle
> > +    * is ok and updation is fruitfull
> > +    * 2.  if point 1 failes then user buff should have
> > +    * DSD sig. this point ensures that if dongle is
> > +    * corrupted then user space program first modify
> > +    * the DSD header with valid DSD sig so that this
> > +    * as well as further write may be worthwhile.
> > +    *
> > +    * This restriction has been put assuming that
> > +    * if DSD sig is corrupted, DSD data won't be
> > +    * considered valid.
> > +    */
> > +   INT Status = STATUS_FAILURE;
> 
> Don't initialize Status here.  It's misleading because we overwrite it
> immediately.

I fixed this (not sent yet).

> 
> > +   ULONG ulDSDMagicNumInUsrBuff = 0;
> > +
> > +   Status = BcmFlash2xCorruptSig(Adapter, Adapter->eActiveDSD);
> > +   if (Status != STATUS_SUCCESS) {
> > +           if (((stNVMReadWrite->uiOffset + stNVMReadWrite->uiNumBytes) !=
> > +                   Adapter->uiNVMDSDSize) ||
> > +                   (stNVMReadWrite->uiNumBytes < SIGNATURE_SIZE)) {
> > +
> > +                   BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG,
> > +                                   DBG_LVL_ALL,
> > +                                   "DSD Sig is present neither in Flash 
> > nor User provided Input..");
> > +                   up(&Adapter->NVMRdmWrmLock);
> > +                   kfree(pReadData);
> > +                   return Status;
> > +           }
> > +
> > +           ulDSDMagicNumInUsrBuff = ntohl(*(PUINT)(pReadData +
> > +                                   stNVMReadWrite->uiNumBytes -
> > +                                   SIGNATURE_SIZE));
> > +           if (ulDSDMagicNumInUsrBuff != DSD_IMAGE_MAGIC_NUMBER) {
> > +                   BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG,
> > +                                   DBG_LVL_ALL,
> > +                                   "DSD Sig is present neither in Flash 
> > nor User provided Input..");
> > +                   up(&Adapter->NVMRdmWrmLock);
> > +                   kfree(pReadData);
> > +                   return Status;
> > +           }
> > +   }
> > +
> > +   return Status;
> 
> This should be return "STATUS_SUCCESS".  The comment explains that if
> we are able to write a corrupt signature the that is success.  Or
> alternatively if we are able to get the DSD signature from the user
> then that is also success.
> 
> The original code worked as described in the comment but your version
> preserves the error code from BcmFlash2xCorruptSig().

What do you mean by "preserves the error code from
BcmFlash2xCorruptSig()" ? I check the return value from the function
I introduced and if it is not STATUS_SUCCESS, I return it. I cannot
see the problem?

Is this the bug you mentioned above?

Thank you for your comments.

-- 
Mit freundlichen Grüßen,
Kind regards,
Matthias Beyer

Proudly sent with mutt.
Happily signed with gnupg.

Attachment: pgpU6NarjT0HV.pgp
Description: PGP signature

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to