static ssize_t manage_flash_write(struct file *file, const char __user *buf, size_t count, loff_t *off) { struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); struct rtas_manage_flash_t *args_buf; const char reject_str[] = "0"; const char commit_str[] = "1"; char stkbuf[10]; int op; args_buf = (struct rtas_manage_flash_t *) dp->data; if ((args_buf->status == MANAGE_AUTH) || (count == 0)) return count; op = -1; if (buf) { if (count > 9) count = 9; if (copy_from_user (stkbuf, buf, count)) { return -EFAULT; } if (strncmp(stkbuf, reject_str, strlen(reject_str)) == 0) op = RTAS_REJECT_TMP_IMG; else if (strncmp(stkbuf, commit_str, strlen(commit_str)) == 0) op = RTAS_COMMIT_TMP_IMG; } if (op == -1) /* buf is empty, or contains invalid string */ return -EINVAL; args_buf->op = op; manage_flash(args_buf); return count; }
static ssize_t manage_flash_write(struct file *file, const char __user *buf, size_t count, loff_t *off) { struct rtas_manage_flash_t *const args_buf = &rtas_manage_flash_data; static const char reject_str[] = "0"; static const char commit_str[] = "1"; char stkbuf[10]; int op, rc; mutex_lock(&rtas_manage_flash_mutex); if ((args_buf->status == MANAGE_AUTH) || (count == 0)) goto out; op = -1; if (buf) { if (count > 9) count = 9; rc = -EFAULT; if (copy_from_user (stkbuf, buf, count)) goto error; if (strncmp(stkbuf, reject_str, strlen(reject_str)) == 0) op = RTAS_REJECT_TMP_IMG; else if (strncmp(stkbuf, commit_str, strlen(commit_str)) == 0) op = RTAS_COMMIT_TMP_IMG; } if (op == -1) { /* buf is empty, or contains invalid string */ rc = -EINVAL; goto error; } manage_flash(args_buf, op); out: mutex_unlock(&rtas_manage_flash_mutex); return count; error: mutex_unlock(&rtas_manage_flash_mutex); return rc; }