Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2ce8fce2
Commit
2ce8fce2
authored
Apr 13, 2013
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cx25821: sanitize cx25821_get_audio_data() a bit
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
05c0ae21
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
58 deletions
+25
-58
drivers/media/pci/cx25821/cx25821-audio-upstream.c
drivers/media/pci/cx25821/cx25821-audio-upstream.c
+25
-58
No files found.
drivers/media/pci/cx25821/cx25821-audio-upstream.c
View file @
2ce8fce2
...
@@ -259,79 +259,46 @@ void cx25821_free_mem_upstream_audio(struct cx25821_dev *dev)
...
@@ -259,79 +259,46 @@ void cx25821_free_mem_upstream_audio(struct cx25821_dev *dev)
static
int
cx25821_get_audio_data
(
struct
cx25821_dev
*
dev
,
static
int
cx25821_get_audio_data
(
struct
cx25821_dev
*
dev
,
struct
sram_channel
*
sram_ch
)
struct
sram_channel
*
sram_ch
)
{
{
struct
file
*
my
file
;
struct
file
*
file
;
int
frame_index_temp
=
dev
->
_audioframe_index
;
int
frame_index_temp
=
dev
->
_audioframe_index
;
int
i
=
0
;
int
i
=
0
;
int
line_size
=
AUDIO_LINE_SIZE
;
int
frame_size
=
AUDIO_DATA_BUF_SZ
;
int
frame_size
=
AUDIO_DATA_BUF_SZ
;
int
frame_offset
=
frame_size
*
frame_index_temp
;
int
frame_offset
=
frame_size
*
frame_index_temp
;
ssize_t
vfs_read_retval
=
0
;
char
mybuf
[
AUDIO_LINE_SIZE
];
char
mybuf
[
line_size
];
loff_t
file_offset
=
dev
->
_audioframe_count
*
frame_size
;
loff_t
file_offset
=
dev
->
_audioframe_count
*
frame_size
;
loff_t
pos
;
char
*
p
=
NULL
;
mm_segment_t
old_fs
;
if
(
dev
->
_audiofile_status
==
END_OF_FILE
)
if
(
dev
->
_audiofile_status
==
END_OF_FILE
)
return
0
;
return
0
;
myfile
=
filp_open
(
dev
->
_audiofilename
,
O_RDONLY
|
O_LARGEFILE
,
0
);
file
=
filp_open
(
dev
->
_audiofilename
,
O_RDONLY
|
O_LARGEFILE
,
0
);
if
(
IS_ERR
(
file
))
{
pr_err
(
"%s(): ERROR opening file(%s) with errno = %ld!
\n
"
,
__func__
,
dev
->
_audiofilename
,
-
PTR_ERR
(
file
));
return
PTR_ERR
(
file
);
}
if
(
IS_ERR
(
myfile
))
{
if
(
dev
->
_audiodata_buf_virt_addr
)
const
int
open_errno
=
-
PTR_ERR
(
myfile
);
p
=
(
char
*
)
dev
->
_audiodata_buf_virt_addr
+
frame_offset
;
pr_err
(
"%s(): ERROR opening file(%s) with errno = %d!
\n
"
,
__func__
,
dev
->
_audiofilename
,
open_errno
);
return
PTR_ERR
(
myfile
);
}
else
{
if
(
!
(
myfile
->
f_op
))
{
pr_err
(
"%s(): File has no file operations registered!
\n
"
,
__func__
);
filp_close
(
myfile
,
NULL
);
return
-
EIO
;
}
if
(
!
myfile
->
f_op
->
read
)
{
for
(
i
=
0
;
i
<
dev
->
_audio_lines_count
;
i
++
)
{
pr_err
(
"%s(): File has no READ operations registered!
\n
"
,
int
n
=
kernel_read
(
file
,
file_offset
,
mybuf
,
AUDIO_LINE_SIZE
);
if
(
n
<
AUDIO_LINE_SIZE
)
{
pr_info
(
"Done: exit %s() since no more bytes to read from Audio file
\n
"
,
__func__
);
__func__
);
filp_close
(
myfile
,
NULL
);
dev
->
_audiofile_status
=
END_OF_FILE
;
return
-
EIO
;
fput
(
file
);
return
0
;
}
}
dev
->
_audiofile_status
=
IN_PROGRESS
;
pos
=
myfile
->
f_pos
;
if
(
p
)
{
old_fs
=
get_fs
();
memcpy
(
p
,
mybuf
,
n
);
set_fs
(
KERNEL_DS
);
p
+=
n
;
for
(
i
=
0
;
i
<
dev
->
_audio_lines_count
;
i
++
)
{
pos
=
file_offset
;
vfs_read_retval
=
vfs_read
(
myfile
,
mybuf
,
line_size
,
&
pos
);
if
(
vfs_read_retval
>
0
&&
vfs_read_retval
==
line_size
&&
dev
->
_audiodata_buf_virt_addr
!=
NULL
)
{
memcpy
((
void
*
)(
dev
->
_audiodata_buf_virt_addr
+
frame_offset
/
4
),
mybuf
,
vfs_read_retval
);
}
file_offset
+=
vfs_read_retval
;
frame_offset
+=
vfs_read_retval
;
if
(
vfs_read_retval
<
line_size
)
{
pr_info
(
"Done: exit %s() since no more bytes to read from Audio file
\n
"
,
__func__
);
break
;
}
}
}
file_offset
+=
n
;
if
(
i
>
0
)
dev
->
_audioframe_count
++
;
dev
->
_audiofile_status
=
(
vfs_read_retval
==
line_size
)
?
IN_PROGRESS
:
END_OF_FILE
;
set_fs
(
old_fs
);
filp_close
(
myfile
,
NULL
);
}
}
dev
->
_audioframe_count
++
;
fput
(
file
);
return
0
;
return
0
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment