-samba3.smb2.rw.invalid
-samba4.smb2.rw.invalid
+samba4.smb2.rw.invalid.ad_dc_ntvfs
int ret;
NTSTATUS status;
SMB_STRUCT_STAT *pst;
+ bool ok;
+
+ ok = vfs_valid_pwrite_range(len, 0);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
status = vfs_stat_fsp(fsp);
if (!NT_STATUS_IS_OK(status)) {
size_t bufsize;
size_t min_aio_read_size = lp_aio_read_size(SNUM(conn));
struct tevent_req *req;
+ bool ok;
+
+ ok = vfs_valid_pread_range(startpos, smb_maxcnt);
+ if (!ok) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
if (fsp->base_fsp != NULL) {
/* No AIO on streams yet */
{
struct tevent_req *req, *subreq;
struct pwrite_fsync_state *state;
+ bool ok;
req = tevent_req_create(mem_ctx, &state, struct pwrite_fsync_state);
if (req == NULL) {
state->fsp = fsp;
state->write_through = write_through;
+ ok = vfs_valid_pwrite_range(offset, n);
+ if (!ok) {
+ tevent_req_error(req, EINVAL);
+ return tevent_req_post(req, ev);
+ }
+
if (n == 0) {
tevent_req_done(req);
return tevent_req_post(req, ev);
struct aio_extra *aio_ex;
size_t min_aio_read_size = lp_aio_read_size(SNUM(conn));
struct tevent_req *req;
+ bool ok;
+
+ ok = vfs_valid_pread_range(startpos, smb_maxcnt);
+ if (!ok) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
if (fsp->base_fsp != NULL) {
/* No AIO on streams yet */
ssize_t read_file(files_struct *fsp,char *data,off_t pos,size_t n)
{
ssize_t ret = 0;
+ bool ok;
/* you can't read from print files */
if (fsp->print_file) {
return -1;
}
+ ok = vfs_valid_pread_range(pos, n);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
+
fsp->fh->pos = pos;
if (n > 0) {
size_t n)
{
ssize_t ret;
+ bool ok;
+
+ ok = vfs_valid_pwrite_range(pos, n);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
if (n == 0) {
return 0;
{
size_t total=0;
ssize_t ret;
+ bool ok;
+
+ ok = vfs_valid_pwrite_range(offset, N);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
if (req && req->unread_bytes) {
int sockfd = req->xconn->transport.sock;
uint64_t space_avail;
uint64_t bsize,dfree,dsize;
NTSTATUS status;
+ bool ok;
/*
* Actually try and commit the space on disk....
DEBUG(10,("vfs_allocate_file_space: file %s, len %.0f\n",
fsp_str_dbg(fsp), (double)len));
- if (((off_t)len) < 0) {
- DEBUG(0,("vfs_allocate_file_space: %s negative len "
+ ok = vfs_valid_pwrite_range((off_t)len, 0);
+ if (!ok) {
+ DEBUG(0,("vfs_allocate_file_space: %s negative/invalid len "
"requested.\n", fsp_str_dbg(fsp)));
errno = EINVAL;
return -1;
int vfs_set_filelen(files_struct *fsp, off_t len)
{
int ret;
+ bool ok;
+
+ ok = vfs_valid_pwrite_range(len, 0);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
contend_level2_oplocks_begin(fsp, LEVEL2_CONTEND_SET_FILE_LEN);
{
ssize_t pwrite_ret;
size_t total = 0;
+ bool ok;
+
+ ok = vfs_valid_pwrite_range(offset, len);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
if (!sparse_buf) {
sparse_buf = SMB_CALLOC_ARRAY(char, SPARSE_BUF_WRITE_SIZE);
NTSTATUS status;
off_t offset;
size_t num_to_write;
+ bool ok;
+
+ ok = vfs_valid_pwrite_range(len, 0);
+ if (!ok) {
+ errno = EINVAL;
+ return -1;
+ }
status = vfs_stat_fsp(fsp);
if (!NT_STATUS_IS_OK(status)) {