Dear all,
We ran into a problem with dbGet() today. It's probably been there for
ages and is pretty benign _unless_ you happen (by mistake) to have an
interrupt vector at address zero (in which case your IOC may hang in the
same way as ours did)!
The problem is that long *perr_status is initialized to NULL and then
the statement *perr_status = 0 is executed, which overwrites the first
four bytes of memory with zeroes. All other accesses to *perr_status are
protected with checks on whether perr_status is NULL (actually I think
that it can be removed since it always _is_ NULL).
Overwriting low memory is always a potential problem if NULL pointers
are erroneously dereferenced. Does anyone move the exception vector
table away from location zero? With a previous system, we did this, set
the first 1024 bytes or so to zero, and had a task switch hook which
checked if any of those 1024 bytes were now non-zero. Of course, this
doesn't catch the above problem and it doesn't catch read access from
low memory.
Really I should be grateful for the dbGet() bug, since it found our
problem for us (eventually)!
William
- Navigate by Date:
- Prev:
Analogue output simulation link SIOL Nick Rees
- Next:
Re: Analogue output simulation link SIOL Rozelle Wright
- Index:
1994
<1995>
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: Analogue output simulation link SIOL Nick Rees
- Next:
Re: dbGet() problem and exception vector table question Marty Kraimer
- Index:
1994
<1995>
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|